如何返回 $ 以外的值?来自 ssh 会话
例如:
x=5
echo "$x"
ssh -o StrictHostKeyChecking=no root@hostname "x=10"
echo "$x"
这将打印
5
5
但我需要新的价值
5
10
试试这个:
x=5
echo "$x"
x=$(ssh -o StrictHostKeyChecking=no root@hostname 'x=10; echo $x')
echo "$x"
这里发生的是您捕获远程执行的命令的输出,并将该输出分配给您的本地变量x
。请注意,我使用单引号而不是双引号来引用远程命令:'x=10; echo $x'
. $x
在双引号中的字符串中,x
在发送到远程主机之前会被 local 的值替换,所以你会得到 5 由远程命令打印并分配给你的 local x
。
你可以这样做:
x=5
echo "$x"
ssh -o StrictHostKeyChecking=no root@hostname 'x=10; exit $x'
echo "$?"
解释:
'x=10; exit $x'
- 这些是您通过ssh
远程运行的指令root@hostname
。因此,您希望将它们括在单引号而不是双引号中,以防止$x
在本地 shell 中自动扩展。x
本地 shell 中的变量与通过会话x
生成的远程 shell 中的变量不同。ssh
$?
是一个特殊的 shell 变量,用于在本地 shell 中存储最近运行的命令的退出状态。由于我们告诉ssh
会话退出10
,这就是它打印的内容echo "$?"