shell腳本ssh遠程執(zhí)行命令給變量賦值的問題解決
需求及目標
從A機器通過SSH方式到B機器,并執(zhí)行相關(guān)的命令。命令中包含變量及變量的賦值。
代碼如下,意思是,ssh到192.111.111.27這臺機器,cd到 / 根目錄下,并執(zhí)行l(wèi)s命令,如果ls出來的結(jié)果不為空,則執(zhí)行echo命令。可以肯定的是 / 根目錄下是有內(nèi)容的。
ssh -i /root/.ssh/private_key -tt -o StrictHostKeyChecking=no rbadmin_app1@192.111.111.27 << eof cd / LSRESULT="$(ls)" echo $LSRESULT exit eof
可以看到當執(zhí)行到 echo 命令的時候,輸出的是空,這就很奇怪。
問題產(chǎn)生的原因
這是因為我們將遠程執(zhí)行的命令和變量賦值語句放在了 SSH 的輸入重定向中 (<< eof … eof)。在這種情況下,腳本中的變量賦值語句將在本地 Shell 中執(zhí)行,而不是遠程機器上。也就是說變量賦值語句其實不會在你遠程執(zhí)行的這臺B機器上去執(zhí)行,而是等到ssh命令完成后,回到機器A上后去執(zhí)行,實際 ls 命令執(zhí)行的路徑是機器A在執(zhí)行ssh命令時所在的路徑。
問題的解決
ssh -i /root/.ssh/private_key -tt -o StrictHostKeyChecking=no rbadmin_app1@192.111.111.27 << eof cd / LSRESULT="\$(ls)" echo \$LSRESULT exit eof
可以看到此時,執(zhí)行echo命令時,就輸出了遠程機器上執(zhí)行的ls命令。修改的地方很簡單,在執(zhí)行的語句外層的$符號前加上反斜杠 \ , 在引用的變量上加上反斜杠 \ 即可。這是由于命令和變量在遠程機器上執(zhí)行,因此需要使用 \ 進行適當?shù)霓D(zhuǎn)義,以確保變量能夠正確地被解析和賦值。
到此這篇關(guān)于shell腳本ssh遠程執(zhí)行命令給變量賦值的問題解決的文章就介紹到這了,更多相關(guān)shell ssh遠程變量賦值內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python創(chuàng)建、刪除桌面、啟動組快捷方式的例子分享
這篇文章主要介紹了Python創(chuàng)建、刪除桌面、啟動組快捷方式的例子分享,需要的朋友可以參考下2014-04-04Shell腳本實現(xiàn)線上服務器之間對比文件是否一致
這篇文章主要介紹了Shell腳本實現(xiàn)線上服務器之間對比文件是否一致,本文腳本在特殊環(huán)境下使用,需要的朋友可以參考下2014-12-12