【发布时间】:2023-04-02 17:15:01
【问题描述】:
我有一个程序在主机上运行时可以运行,但在通过 ssh 运行时失败,因为没有设置环境变量。
此变量在/etc/environment 中设置为export hiveURI=connectstring。
以下所有返回connectstring:
echo $hiveURI
bash -c 'echo $hiveURI'
sh -c 'echo $hiveURI'
ssh host 'echo $hiveURI'
但以下命令返回 null:
ssh host 'bash -c echo $hiveURI'
ssh host 'sh -c echo $hiveURI'
我无法控制远程调用程序的方式,但我怀疑它是最后两个之一。
发生了什么,我该如何解决?
更新:
如下所述,我应该使用更多的引号。最后两个命令,正确引用,返回connectstring。所以,这个问题已经回答了,但我的问题仍然存在。感谢您的意见。
【问题讨论】:
-
bash -c echo $hiveURI永远不会工作;它需要更多报价。它将echo视为一个脚本来运行任何hiveURI扩展为作为参数传递给该脚本的脚本......但是脚本echo根本不会读取它的参数,所以即使值在那里,它会被忽略。 -
我建议从
ssh host env开始,以确保在远程系统上真正设置了变量。 -
如果可行,下一个开始的地方是
ssh host $'bash -c \'echo $hiveURI\'' -
虽然根本没有理由使用
bash -c:ssh host somecommand arg1 arg2 ...总是 隐式地在host上启动sh -c 'somecommand arg1 arg2 ...'。 -
...所以
ssh host 'bash -c echo $hiveURI'在远程主机上开始(以JSON 语法)["sh", "-c", "bash -c echo $hiveURI"]。bash -c echo $hiveURI如果你在没有 ssh 的情况下在本地运行它,同样的方式会失败,顺便说一句。
标签: bash environment-variables