Exit
為什麼腳本開頭的退出狀態總是0?
我有一個這樣的腳本,名為
judge
:#!/bin/bash echo "last exit status is $?"
它始終輸出“最後退出狀態為 0”。例如:
ls -l; judge # correctly reports 0 ls -z; judge # incorrectly reports 0 beedogs; judge # incorrectly reports 0
為什麼?
有不同的 bash 程序執行每一行程式碼,並且
$?
在程序之間不共享。judge
您可以通過創建bash 函式來解決此問題:[root@xxx httpd]# type judge judge is a function judge () { echo "last exit status is $?" } [root@xxx httpd]# ls -l / >/dev/null 2>&1; judge last exit status is 0 [root@xxx httpd]# ls -l /doesntExist >/dev/null 2>&1; judge last exit status is 2 [root@xxx httpd]#
正如評論中所討論的,$? 變數保存最後一個向 shell 返回值的程序的值。
如果
judge
需要根據之前的命令狀態做某事,你可以讓它接受一個參數,並傳入狀態。#!/bin/bash echo "last exit status is $1" # Or even return $1
所以:
[cmd args...]; judge $?