[英]Why is the order of execution inversed in this bash script?
我有這個腳本:
ssh -T user@$123.456.789.123 <<EOF
cd www
var=$(tail index.htm)
echo $var
EOF
我認為應該做的是:
相反,似乎tail是在更改文件夾之前執行的,因此找不到index.htm文件。
我嘗試使用不同的命令,並且每次似乎我嘗試存儲到變量中的命令替換結果在打開SSH連接后,在執行任何其他腳本之前都立即執行。
我在這里想念什么?
$(...)
在本地擴展,然后將here文檔的內容傳遞給ssh
。 要將文字文本發送到遠程服務器,請引用此處文檔定界符。
ssh -T user@$123.456.789.123 <<'EOF'
cd www
var=$(tail index.htm)
echo "$var"
EOF
(另外,引用$var
的擴展名以保護外殼程序的任何嵌入式間距。)
tail
在本地計算機上的bash腳本中運行,而不是在遠程主機上。 甚至在執行ssh
命令之前都會進行替換。
您的腳本可以簡單地替換為:
ssh -T user@$123.456.789.123 tail www/index.htm
如果要將這些命令發送到遠程服務器,可以編寫
ssh -T user@$123.456.789.123 'cd www && var=$(tail index.htm) && echo $var'
請注意,根據前一個命令的結果限制下一個命令,可使SSH返回有意義的返回碼。 在您的Heredoc中,無論發生什么情況(例如, tail
失敗),SSH都將以$?= 0返回,因為echo
不會失敗。
另一種選擇是在此處創建腳本並使用ssh啟動它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.