通过SSH运行'export'命令

时间:2011-01-11 22:53:57

标签: bash ssh

当我从bash shell运行以下内容时:

bash -c '(export abc=123 && echo $abc)'

输出为“123”。但当我在ssh上运行时:

ssh remote-host "bash -c '(export abc=123 && echo $abc)'"

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

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

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

1 个答案:

答案 0 :(得分:11)

那是因为使用时

ssh remote-host "bash -c '(export abc=123 && echo $abc)'"

在执行$USER之前,变量由 local shell扩展(与ssh的情况一样)。使用$逃离\$,它应该没问题

ssh remote-host "bash -c '(export abc=123 && echo \$abc)'"

旁注:

  • 您无需为此导出。
  • 您无需将其包装在()

像这样:

ssh remote-host "bash -c 'abc=123 && echo \$abc'"

哎呀,您甚至可以省略bash -c ...内容,正如ssh联机帮助页所述:

  

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

但这些可能与您的任务有关;)