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