ftp -v -n <<! > /tmp/ftp$$ 2>&1
open $TARGET_HOST
user $TARGET_USER $TARGET_PWORD
binary
cd $TARGET_PUT_DIR
put $RESULTS_OUT_DIR/$FILE $FILE
bye
!
我明白了<<!是“here-document”,將命令傳遞給 ftp,直到到達分隔符“!” 但我似乎無法理解這個重定向:
> /tmp/ftp$$ 2>&1
有人可以解釋一下這里發生了什么嗎?
uj5u.com熱心網友回復:
首先,heredoc 可以在最后列出而不影響發生的事情。Heredocs 傳統上是最后撰寫的,<<NAME但實際上可以在命令中的任何位置撰寫。<<相對于兩個重定向的順序>無關緊要,因為前者改變標準輸入,后者改變標準輸出和標準錯誤。
如果寫成這樣會更清楚:
ftp -v -n > /tmp/ftp$$ 2>&1 <<!
...
!
其次,解釋輸出重定向:
> /tmp/ftp$$將 stdout 重定向到一個名為 的檔案/tmp/ftp1234,其中1234是當前 shell 行程的 PID。這是一種制作具有相對唯一名稱的臨時檔案的臨時方法。如果 shell 腳本并行運行多次,則每個副本都會寫入不同的臨時檔案。2>&1將 stderr (fd 2) 重定向到 stdout (fd 1)。換句話說,它將錯誤訊息發送到同一個檔案/tmp/ftp$$。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492672.html
