2016-04-02 32 views
1

我嘗試遠程處理,同時通過ssh閱讀環線下列要求:處理,同時通過ssh不填讀取行遠程讀取變量

ssh /root/.ssh/id_rsa "while read var; do echo \"- $var -\"; done < /tmp/file; cat /tmp/file" 

/tmp目錄/文件存在於遠程位置。該命令的輸出應該是:

- /tmp - 
- /var - 
/tmp 
/var 

但輸出居然是:

- - 
- - 
/tmp 
/var 

爲什麼不能是$ var在這裏得到填充,當遠程執行? 如果我碰巧通過ssh將控制檯連接到計算機並執行相同的命令,它將按預期工作。

回答

2

您應該使用單引號或轉義$var中的$。目前$var在ssh運行之前就被取代了。

ssh /root/.ssh/id_rsa 'while read var; do echo "- $var -"; done < /tmp/file; cat /tmp/file' 
+0

加雙引號和 - 只是爲了測試。轉義雙引號或者通過不帶雙引號的echo $ var進行替換不會改變預期的結果。 – deajan

+0

其實問題是使用雙引號。看到我更新的答案。 –

+0

確實......我應該考慮變量替換,而不是在一個小時左右嘗試看看會發生什麼。謝謝。 – deajan

1

$varssh之前,因爲它是雙引號內得到擴大。如果你把你傳遞到ssh命令是用單引號也不會得到擴展,或者如果你逃避$你應該設置:

ssh /root/.ssh/id_rsa 'while read var; do echo "- $var -"; done < /tmp/file; cat /tmp/file' 

ssh /root/.ssh/id_rsa "while read var; do echo \"- \$var -\"; done < /tmp/file; cat /tmp/file"