【问题标题】:Write SSH command over multiple lines多行编写 SSH 命令
【发布时间】:2015-11-11 23:51:42
【问题描述】:

我正在尝试远程登录到 shell 并在 shell 上执行一堆命令。 但为了使其更具可读性,我想将我的代码放在多行中。我该怎么做?

ssh -o <Option> -x -l <user> <host> " $long_command1; $long_command2; ....  "

谢谢!

【问题讨论】:

    标签: bash shell ssh remote-access


    【解决方案1】:

    ssh 实际上只是将一个字符串传递给远程主机。在那里,这个字符串被提供给一个应该解释它的 shell(用户的登录 shell,通常类似于 bash)。因此,无论您要执行什么,都需要该远程登录 shell 可以解释,这就是您必须遵守的全部规则。

    您确实可以在命令字符串中使用换行符:

    ssh alfe@sweethome "
      ls /home/alfe/whatever
      ping foreignhost
      date
      rm foobar
    "
    

    【讨论】:

    • 您可能想看看 this answer 我最近刚刚提供的关于将变量传递到 ssh-remote shell 的内容。
    【解决方案2】:

    您可以使用bashHere Documents 功能。 就像:

    ssh <remote-host> bash <<EOF
    echo first command
    echo second command
    EOF
    

    EOF 标志着输入的结束。

    更多信息:使用man bash 并搜索Here Documents

    编辑:唯一需要注意的是,使用变量可能很棘手,您必须转义 $ 以保护它们在远程主机而不是本地 shell 上进行评估。喜欢\$HOSTNAME。否则适用于从 bash 运行并使用 stdin 的所有内容。

    【讨论】:

    • 这里会使用远程用户的 bash shell 吗?
    • @ShyamaDorbala:是的,远程 bash。它实际上在没有bash 的情况下也可以工作,只需“HereDocing”到 ssh。
    • 有趣。我会检查一下。谢谢!
    • 我喜欢这个解决方案,但我希望它更适合缩进。前导空格会破坏它(但前导标签是可以的)。
    • 作为转义的替代方法,您可以使用
    【解决方案3】:

    你可以像下面的例子那样做。

    ssh -o <Option> -x -l <user> <host> '
    pwd
    whoami
    ls
    echo "$PATH"
    '
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-10
      • 2023-03-28
      • 2020-09-24
      • 1970-01-01
      • 1970-01-01
      • 2012-05-22
      • 2020-10-26
      • 1970-01-01
      相关资源
      最近更新 更多