开发者

Run 'export' command Over SSH

When I run the following from my bash shell:

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

The output is "123". But when I run it over ssh:

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

There is no output. Why is this? Is there a way around this? That is, is there a way to set an environment variable for a command I run over ssh?

Not开发者_运维知识库e: When I replace echo $abc with something standard like echo $USER the ssh command prints out the username on the remote machine as expected since it is already set.

I am running RHEL 5 Linux with OpenSSH 4.3


That is because when using

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

the variable gets expanded by the local shell (as it is the case with $USER) before ssh executes. Escape the $ by using \$ and it should do fine

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

On a side note:

  • You don't need to export just for this.
  • You don't need to wrap it in ()

Like so:

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

Heck, you can even leave out the bash -c ... stuff, as the ssh manpage states:

If command is specified, it is executed on the remote host instead of a login shell.

But these may be specific to your task ;)

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜