我想通过SSH连接并在连接时运行命令。 我运行以下命令:
ssh host -t“command”
但我需要更改一些环境变量才能运行命令,似乎 eval 无效。
ssh host -t "eval `somescript.sh tcsh`; env | grep variables_that_should be_changed"
它根本没有评估脚本并且说该命令不存在“somescript.sh”。
somescript.sh存在于远程计算机上,而不是来自的远程计算机。
有没有办法解决这个问题?
答案 0 :(得分:2)
设置环境变量并在同一脚本中执行命令,并通过ssh运行该脚本。在脚本存在之前,环境变量才有效。
答案 1 :(得分:0)
您已经选择了“最佳答案”,所以我的回答只是帮助您了解错误。
根据您问题中的代码,您似乎遇到了引用问题。你说:
ssh host -t "eval `somescript.sh tcsh`; env | grep variables_that_should be_changed"
当你在双引号内有反引号(`...`
)时,它们会被调用shell 而不是你在远程服务器上运行的shell扩展。因此,对于您的命令行,somescript.sh
需要在本地存在,并且您将使用命令行将该脚本的输出嵌入到远程运行的命令行中。可能不是你想要的。
尽管有其他语法或程序上的改进,但如果用单引号替换双引号,则反引号将作为远程运行的命令行的一部分发送,而不是在本地扩展。
此外,如果您使用反引号,请考虑使用$(...)
符号替换它们。它更容易阅读,可以嵌套,并且通常被认为是现代贝壳的“更好的方式”。