Shell中, 退出整個指令碼

2022-02-19 13:23:42 字數 1194 閱讀 2644

cat >test.sh《可以看到直接使用exit可以退出指令碼,並且可以將錯誤碼作為引數傳遞。下面我們將指令碼做一點點改動。

cat >test.sh《在管道(|)中執行exit_script函式,不會退出整個指令碼!原因在於,exit只能退出它所在的shell,而放在管道中執行的命令/函式都是在獨立的shell(sub-shell)中執行的,所以上面指令碼的程序樹是這個樣子的:

ppid pid pgid sid tty tpgid stat uid time command

17510 26959 26959 26959 pts/0 14049 ss 0 0:00 \_ -bash

26959 13843 13843 26959 pts/0 14049 s 0 0:00 | \_ /bin/bash ./test.sh

13843 13844 13843 26959 pts/0 14049 s 0 0:00 | | \_ :

13843 13845 13843 26959 pts/0 14049 s 0 0:00 | | \_ /bin/bash ./test.sh

13845 13846 13843 26959 pts/0 14049 s 0 0:00 | | \_ exit 1

自上往下,各個pid的含義如下表:

pid說明

26959

./test.sh所在的shell

13843

管道中:新開的shell

13844

:命令13845

管道中exit_shell新開的shell

13846

exit命令

cat >test.sh《這裡首先在指令碼的主程序中捕獲(trap)term訊號: 當主程序接收到term訊號後,會執行exit 1;再在sub-shell中向指令碼主程序傳送term訊號,這樣就可以讓整個指令碼退出了!

shell指令碼 exit退出當前程序

exit是乙個shell內建命令,用於退出當前使用者的登入狀態 退出shell程序 exit 命令可以接受乙個整數值作為引數,代表退出狀態。如果不指定,預設狀態值是 0。例如 root linus bash root linus exit exit root linus echo 0 root li...

shell指令碼中報錯不立即退出設定

set e 表示有報錯即退出,set e 表示關閉這種設定。set e 等價於 set o errexit set e 等價於 set o errexit 如下指令碼若不設定set e,當git clone失敗之後將會退出,但是設定之後如果每次都失敗則會將計數器跑完3次 例子 retry count...

shell指令碼中函式呼叫的返回值,以及退出狀態問題

最近開始學習shell指令碼,由於之前沒怎麼接觸過linux和shell,所以一切從頭開始學起 shell指令碼編寫方法與程式設計類似,只是趨向於物件導向程式設計 個人理解,如果錯誤,麻煩各位老鳥指出 其他關於shell指令碼到底是怎麼樣的乙個東西大家可以上網查詢一下資料。由於之前寫 使用的都是c,...