连接时{s}和运行命令

时间:2016-05-27 11:09:46

标签: linux bash ssh

我想通过SSH连接并在连接时运行命令。 我运行以下命令:

  

ssh host -t“command”

但我需要更改一些环境变量才能运行命令,似乎 eval 无效。

ssh host -t "eval `somescript.sh tcsh`; env | grep variables_that_should be_changed"

它根本没有评估脚本并且说该命令不存在“somescript.sh”。

somescript.sh存在于远程计算机上,而不是来自的远程计算机。

有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:2)

设置环境变量并在同一脚本中执行命令,并通过ssh运行该脚本。在脚本存在之前,环境变量才有效。

答案 1 :(得分:0)

您已经选择了“最佳答案”,所以我的回答只是帮助您了解错误。

根据您问题中的代码,您似乎遇到了引用问题。你说:

ssh host -t "eval `somescript.sh tcsh`; env | grep variables_that_should be_changed"

当你在双引号内有反引号(`...`)时,它们会被调用shell 而不是你在远程服务器上运行的shell扩展。因此,对于您的命令行,somescript.sh需要在本地存在,并且您将使用命令行将该脚本的输出嵌入到远程运行的命令行中。可能不是你想要的。

尽管有其他语法或程序上的改进,但如果用单引号替换双引号,则反引号将作为远程运行的命令行的一部分发送,而不是在本地扩展。

此外,如果您使用反引号,请考虑使用$(...)符号替换它们。它更容易阅读,可以嵌套,并且通常被认为是现代贝壳的“更好的方式”。