【问题标题】:Heredoc for nested command in bashHeredoc 用于 bash 中的嵌套命令
【发布时间】:2015-01-16 16:41:35
【问题描述】:

我需要 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'。我该如何解决这个问题?

【问题讨论】:

  • -c 选项需要命令行中的参数,而不是heredoc。 heredoc 是一种输入重定向。
  • 删除-c就可以了。
  • 另外,-i 表示“交互式”,不是吗?如果你重定向它的标准输入怎么可能?
  • @anubhava,谢谢,它解决了我的问题!你能写一个答案让我接受吗?另外,如果您有时间,我想详细了解一下为什么它一开始就不起作用。

标签: bash ssh nested heredoc


【解决方案1】:

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

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'"

【讨论】:

    猜你喜欢
    • 2014-04-05
    • 1970-01-01
    • 2016-03-26
    • 2017-02-02
    • 2018-09-13
    • 1970-01-01
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多