bash 中嵌套命令的 Heredoc

lin*_*ndy 4 ssh bash nested heredoc

我需要 ssh 进入一台机器并在sudo bash. 这是我尝试过的:

sshpass -p "vagrant" ssh vagrant@33.33.33.100 "sudo bash -i -c <<EOF
    echo
    ls
    echo
EOF"
Run Code Online (Sandbox Code Playgroud)

但这让我很困惑'bash: -c: option requires an argument\n'。我怎样才能解决这个问题?

anu*_*ava 5

您需要-c从命令行中删除以使其接受heredoc:

sshpass -p "vagrant" ssh vagrant@33.33.33.100 "sudo bash <<EOF
    echo
    ls
    echo
EOF"
Run Code Online (Sandbox Code Playgroud)

您也可以删除-i(交互式)选项。

bash -c希望您在命令行上提供所有命令,因此这也可以工作:

sshpass -p "vagrant" ssh vagrant@33.33.33.100 "sudo bash -c 'echo; ls; echo'"
Run Code Online (Sandbox Code Playgroud)