需求及目標(biāo)
從A機(jī)器通過(guò)SSH方式到B機(jī)器,并執(zhí)行相關(guān)的命令。命令中包含變量及變量的賦值。
代碼如下,意思是,ssh到192.111.111.27這臺(tái)機(jī)器,cd到 / 根目錄下,并執(zhí)行l(wèi)s命令,如果ls出來(lái)的結(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í)候,輸出的是空,這就很奇怪。
問(wèn)題產(chǎn)生的原因
這是因?yàn)槲覀儗⑦h(yuǎn)程執(zhí)行的命令和變量賦值語(yǔ)句放在了 SSH 的輸入重定向中 (<< eof … eof)。在這種情況下,腳本中的變量賦值語(yǔ)句將在本地 Shell 中執(zhí)行,而不是遠(yuǎn)程機(jī)器上。也就是說(shuō)變量賦值語(yǔ)句其實(shí)不會(huì)在你遠(yuǎn)程執(zhí)行的這臺(tái)B機(jī)器上去執(zhí)行,而是等到ssh命令完成后,回到機(jī)器A上后去執(zhí)行,實(shí)際 ls 命令執(zhí)行的路徑是機(jī)器A在執(zhí)行ssh命令時(shí)所在的路徑。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-519960.html
問(wèn)題的解決
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命令。修改的地方很簡(jiǎn)單,在執(zhí)行的語(yǔ)句外層的$符號(hào)前加上反斜杠 \ , 在引用的變量上加上反斜杠 \ 即可。這是由于命令和變量在遠(yuǎn)程機(jī)器上執(zhí)行,因此需要使用 \ 進(jìn)行適當(dāng)?shù)霓D(zhuǎn)義,以確保變量能夠正確地被解析和賦值。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-519960.html
到了這里,關(guān)于shell腳本ssh遠(yuǎn)程執(zhí)行命令給變量賦值的問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!