在bash中嵌套命令的Heredoc

4

我需要通过ssh登录到一台机器,并在sudo bash下执行一系列命令。以下是我尝试过的方法:

sshpass -p "vagrant" ssh vagrant@33.33.33.100 "sudo bash -i -c <<EOF
    echo
    ls
    echo
EOF"

但是它会抛出 'bash: -c: option requires an argument\n' 的错误。我该如何修复这个问题?


2
您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Jdamian
只需删除“-c”,它就可以正常工作。 - anubhava
此外,-i 不是表示“交互式”吗?如果你正在重定向其标准输入,那么这怎么可能呢? - Jdamian
1
@anubhava,谢谢,这解决了我的问题!您能写一个回答,以便我可以接受它吗?如果您有时间,我也想了解更多关于为什么一开始它没有运行的细节。 - linkyndy
1个回答

5

要接受heredoc,请从命令行中删除-c

sshpass -p "vagrant" ssh vagrant@33.33.33.100 "sudo bash <<EOF
    echo
    ls
    echo
EOF"

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

bash -c 希望您在命令行提供所有的命令,因此这也可能有效:

sshpass -p "vagrant" ssh vagrant@33.33.33.100 "sudo bash -c 'echo; ls; echo'"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接