返回值其他那个$?来自ssh session

时间:2012-12-20 16:19:19

标签: shell ssh

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

例如:

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

这将打印

5
5

但我需要新的价值

5
10

2 个答案:

答案 0 :(得分:12)

试试这个:

x=5 
echo "$x"
x=$(ssh -o StrictHostKeyChecking=no root@hostname 'x=10; echo $x')
echo "$x"

这里发生的是捕获远程执行的命令的输出,并将该输出分配给本地变量x。请注意,我使用单引号而不是双引号来引用远程命令:'x=10; echo $x'。双引号中的字符串中的$x在被发送到远程主机之前将被本地x的值替换,因此您将通过远程命令打印并分配给您的本地{{1} }。

答案 1 :(得分:2)

您可以按照以下方式执行此操作:

x=5
echo "$x"
ssh -o StrictHostKeyChecking=no root@hostname 'x=10; exit $x'
echo "$?"

<强>解释

  • 'x=10; exit $x' - 这些是您通过ssh传递以在root@hostname上远程运行的说明。因此,您希望将它们用单引号括起来而不是双引号,以防止在本地shell中自动扩展$x
  • 请注意这里的细微差别:本地shell中的变量x 是通过x会话生成的远程shell中的ssh
  • $?是一个特殊的shell变量,用于存储最近运行的命令在本地shell中的退出状态。由于我们告诉ssh会话退出10,因此使用echo "$?"打印的内容