Exit

為什麼腳本開頭的退出狀態總是0?

  • March 9, 2016

我有一個這樣的腳本,名為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 $?

引用自:https://unix.stackexchange.com/questions/268704