2012-12-20 63 views
3

如何返回$以外的值?從SSH會話

例如:

x=5 
echo "$x" 
ssh -o StrictHostKeyChecking=no [email protected] "x=10" 
echo "$x" 

這將打印

5 
5 

但我需要新的價值

5 
10 

回答

10

打印試試這個:

x=5 
echo "$x" 
x=$(ssh -o StrictHostKeyChecking=no [email protected] 'x=10; echo $x') 
echo "$x" 

這裏發生的是你捕獲命令的輸出,遠程執行,並分配輸出到您的本地變量x。請注意,我使用單引號(而不是雙引號)來引用遠程命令:'x=10; echo $x'$x在發送到遠程主機之前將被替換爲本地x的值,因此您將得到5個由遠程命令打印並分配給本地的x

+0

謝謝。這實際上很簡單。我不知道爲什麼我沒有想到這一點。 – xoq

+0

不用擔心,不客氣。 – piokuc

2

可以按如下方式做到這一點:

x=5 
echo "$x" 
ssh -o StrictHostKeyChecking=no [email protected] 'x=10; exit $x' 
echo "$?" 

說明:

  • 'x=10; exit $x' - 這些都是要在[email protected]遠程運行您通過ssh傳遞指令。因此,您希望將它們用單引號而不是雙引號括起來,以防止在本地shell中自動擴展$x
  • 注意一個微妙的區別在這裏:在你的本地shell變量x在通過您的ssh會議催生了遠程shell相同x
  • $?是一個特殊的shell變量,它將最近運行的命令的退出狀態存儲在本地shell中。因爲我們告訴ssh會議與10退出,這就是它與echo "$?"
+1

夥計,這隻適用於數字,但不適用於文本。感謝您的幫助,但我會接受piokuc的答案,因爲它適用於數字和文本。報告的錯誤是「需要數字參數」。 – xoq

+2

這沒有問題;你的問題標題指定了'$?',所以我假設你對'ssh'的返回值感興趣(返回值傳統上是用於unix命令的'0-255'之間的整數) –

+0

感謝您的信息。 – xoq