当我从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
答案 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。
但这些可能与您的任务有关;)