簡體   English   中英

為什么在此bash腳本中執行順序相反?

[英]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

我認為應該做的是:

  1. 通過SSH連接到服務器,
  2. 然后轉到文件夾www
  3. 然后將index.htm尾部存儲到變量var中
  4. 最后顯結果。

相反,似乎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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM