我希望遵循此命令来扩展远程服务器上的 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 是zsh
或bash
,那么您可以使用%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"' )"
也可以看看: