如何运行ssh命令并让变量远程扩展

如何运行ssh命令并让变量远程扩展

我希望遵循此命令来扩展远程服务器上的 HOME 变量:

ssh user@host bash -c "'echo ${HOME}'"

但相反,这是在本地扩展的。

如何获取远程 HOME 变量?

答案1

如果目的只是获取HOME环境变量的远程值,那么会更容易做到

ssh user@host printenv HOME

只要远程 shell 或系统具有该printenv实用程序,这就可以工作。


HOME变量正在本地扩展,因为它位于双引号字符串中。

相反,执行以下任一操作

ssh user@host 'bash -c "echo \"\$HOME\""'

或者

ssh user@host 'bash -c '"'"'echo "$HOME"'"'"

在上面的第一种情况下,远程 shell 获取命令

bash -c "echo \"\$HOME\""

执行。

在第二个中,它得到

bash -c 'echo "$HOME"'

如果您的本地 shell 是zshbash,那么您可以使用%q格式说明符printf为远程 shell 构造正确引用的字符串:

ssh user@host "$( printf '%q ' bash -c 'echo "$HOME"' )"

这也适用于多行命令:

ssh user@host "$( printf '%q ' bash -c '
echo "home: $HOME"
echo "away: $AWAY"' )"

也可以看看:

相关内容