我對bash的行為和輸入命令時的退出狀態情況感到好奇
exit [exit status] | exit [exit status] | ... [exit 和 exit status 的重復]
它給我的輸出如下。然后,沒有退出。
這是未定義的嗎?
這是一個未定義的行為嗎?
bash-3.2$ exit 1 | exit 2
bash-3.2$ echo $?
2
uj5u.com熱心網友回復:
來自bash man頁:
管道中的每條命令都作為一個單獨的行程來執行(即在一個子殼中)。
因此,即使是第一個exit也不會退出你的shell,因為它只退出子shell。
至于退出代碼:
管道的回傳狀態是最后一條命令的退出狀態,除非啟用了 pipefail 選項。如果啟用了pipefail,管道的回傳狀態是最后一條(最右邊的)命令的非零退出狀態,如果所有命令都成功退出,則回傳狀態為零。
你可以像這樣激活pipefail:
$ set -o pipefail
$ exit 1 | exit 2 | exit 0
$ echo $?
2
uj5u.com熱心網友回復:
exit 1 | exit 2不是順序的而是并發的。
即使最后一條命令從第一條命令獲取STDOUT輸出。 什么是Bash中管道作業的簡單解釋?
此外,這些命令中的每一條都是在一個子shell中執行的。 所以你的主shell,也就是你輸入命令的地方不會被退出。
一個管道化的命令就像一個完整的命令組合,而不是一個接一個的命令。
如果你想退出,你可以讓它按順序進行 exit 1 || exit 2。
最后,默認情況下,$?是最新的前臺管道退出狀態。
什么是特殊的美元符號外殼變數?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/308009.html
標籤:
