3

如何返回 $ 以外的值?来自 ssh 会话

例如:

x=5
echo "$x"
ssh -o StrictHostKeyChecking=no root@hostname "x=10"
echo "$x"

这将打印

5
5

但我需要新的价值

5
10
4

2 回答 2

15

试试这个:

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

于 2012-12-20T16:30:58.750 回答
1

你可以这样做:

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 "$?"
于 2012-12-20T16:30:20.120 回答