通过SSH运行'export'命令

aar*_*acy 5 ssh bash

当我从我的bashshell 运行以下内容时:

bash -c '(export abc=123 && echo $abc)'
Run Code Online (Sandbox Code Playgroud)

输出为"123".但是当我把它运行时ssh:

ssh remote-host "bash -c '(export abc=123 && echo $abc)'"
Run Code Online (Sandbox Code Playgroud)

没有输出.为什么是这样?有没有解决的办法?也就是说,有没有办法为我运行的命令设置环境变量ssh

注意:当我替换echo $abc标准之类echo $USERssh命令时,命令会按预期打印出远程计算机上的用户名,因为它已经设置好了.

我正在使用OpenSSH 4.3运行RHEL 5 Linux

Mar*_*gen 11

那是因为使用时

ssh remote-host "bash -c '(export abc=123 && echo $abc)'"
Run Code Online (Sandbox Code Playgroud)

在执行之前,变量由本地 shell(就像它的情况一样$USER)扩展ssh.逃避$使用\$它应该做得很好

ssh remote-host "bash -c '(export abc=123 && echo \$abc)'"
Run Code Online (Sandbox Code Playgroud)

在旁注:

  • 您不需要为此导出.
  • 你不需要将它包装在()中

像这样:

ssh remote-host "bash -c 'abc=123 && echo \$abc'"
Run Code Online (Sandbox Code Playgroud)

哎呀,你甚至可以省略这些bash -c ...东西,正如ssh manpage所述:

如果指定了command,则在远程主机上执行它而不是登录shell.

但这些可能是您的任务所特有的;)