我有時使用 ssh 在遠程主機上運行多個命令,如下所示:
ssh my_user@my_host "command1; command2"
利用雙引號將兩個命令發送到遠程機器。
現在我想在一個或兩個命令中訪問一個環境變數。
這是一個簡化的示例,說明了我的嘗試:
ssh my_user@my_host "echo $USER; echo $HOSTNAME"
這會在本地機器上回顯我的用戶/主機名,而我希望在遠程機器上查看名稱。
使用單引號,我可以實作我想要的單個命令,如下所示:
ssh my_user@my_host echo '$USER'
但是當我在這樣的雙引號內使用單引號時,我沒有得到我想要的行為:
ssh my_user@my_host "echo '$USER'; echo '$HOSTNAME'"
如何通過單個 ssh 命令執行兩個命令來獲得我想要的行為?
(請注意,我的實際命令更復雜......我確實意識到我可以在一個命令中為我的玩具示例獲取兩個變數,但這并不能解決我的真正問題):
ssh my_user@my_host echo '$USER' '$HOST'
uj5u.com熱心網友回復:
只需使用 \ 轉義 $。
ssh my_user@my_host "echo \$USER; echo \$HOSTNAME"
uj5u.com熱心網友回復:
您可以將整個命令放在單引號中運行,如下所示:
ssh my_user@my_host 'echo $USER; echo $HOSTNAME'
這將防止您的 shell 在將環境變數值傳遞給遠程機器之前替換它們,但是當它們到達遠程機器時,它們不會被參考,因此它們會在那里被評估。
uj5u.com熱心網友回復:
感謝吉爾赫姆·里希特。該解決方案有效!5分鐘過去后我會接受。我想記錄一下,與此同時,我找到了另一種避免雙引號而不是通過轉義分號來避免單引號的解決方案:
ssh user@host echo '$USER' \; echo '$USER'
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/474221.html
