Bash 运行';出口';SSH上的命令

Bash 运行';出口';SSH上的命令,bash,ssh,Bash,Ssh,当我从我的bashshell运行以下命令时: bash -c '(export abc=123 && echo $abc)' 输出为“123”。但是当我在ssh上运行它时: ssh remote-host "bash -c '(export abc=123 && echo $abc)'" 没有输出。为什么会这样?有办法解决这个问题吗?也就是说,有没有办法为我在ssh上运行的命令设置环境变量 注意:当我将echo$abc替换为类似echo$USER的标准内容时,

当我从我的
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,这是因为

ssh remote-host "bash -c '(export abc=123 && echo $abc)'"
在执行
ssh
之前,该变量由本地shell展开(与
$USER
的情况相同)。使用
\$
$
进行转义,应该可以

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

  • 您不需要仅为此导出
  • 你不需要用()
像这样:

ssh remote-host "bash -c 'abc=123 && echo \$abc'"
见鬼,您甚至可以省略
bash-c…
内容,正如ssh手册页所述:

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


但这些可能是特定于您的任务;)

太好了,谢谢!我要做的事情还有很多,所以我必须使用“bash-c”和“export”,但这肯定能解决问题。是的,有道理:)。祝你好运