连接后执行SSH并运行命令

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

ssh host -t“命令”

但我需要改变一些环境variables为了运行命令,它似乎像eval不工作。

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

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

somescript.sh存在于远程机器上,而不是一个imshshing。

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

把设置的环境变量和执行命令在同一个脚本,并通过SSH运行该脚本。 直到脚本存在,环境变量才有效。

你已经选择了“最好的答案”,所以我的答案只是帮助你了解什么是错的。

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

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

当你在双引号里面加反引号( `...` )时,它们会被调用shell而不是你在远程服务器上运行的shell扩展。 所以对于你的命令行, somescript.sh将需要在本地存在,你可以使用你的命令行把这个脚本的输出嵌入到你远程运行的命令行中。 可能不是你想要的。

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

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