自上往下,各個pid的含義如下表: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說明
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,...