作業系統是怎麼判斷和表達程式執行是成功與否?

程式在結束運行時會返回一個數值以表示結束,作業系統身為系統軟體程式在結束之時同樣也會返回一個數值以表示結束。

我們在terminal給予指令,shell根據指令執行任務,結束時系統也會返回一個值。這些值當中,若是返回0代表執行是成功的,而若是返回非0的值則代表執行的程式是失敗的。其中,不同的非0值也會對應到不同的錯誤(Exit Codes With Special Meanings)。

這個問題的答案也是 Github Actions 的通關依據,若是所有的返回值為0,Github Actions就會判別測試通過;反之,則測試不通過。

如何查看執行是成功與否?

前一個命令的返回值會儲存在$?當中(‘$’的更多資訊)藉由echo $? 即可查看查看執行是成功與否。

  • 成功的執行

    1
    2
    3
    ~/git-repo$ cd mmnote
    ~/git-repo/mmnote$ echo $?
    0
  • 失敗的執行

    1
    2
    3
    4
    ~/git-repo/mmnote$ zzzzz
    zzzzz: command not found
    ~/git-repo/mmnote$ echo $?
    127

透過Make查看執行是成功與否?

假設我們的指令是寫在Makefile當中,make 執行的結果可以直接查看成功與否。

  • Makefile的內容

    1
    2
    3
    4
    5
    6
    7
    .PHONY: success-demo
    success-demo:
    cd mmnote

    .PHONY: fail-demo
    fail-demo:
    zzzzz
  • 成功的執行

    1
    2
    ~/git-repo$ make success-demo 
    cd mmnote
  • 失敗的執行

    1
    2
    3
    4
    ~/git-repo$ make fail-demo 
    zzzzz
    make: zzzzz: Command not found
    make: *** [Makefile:7: fail-demo] Error 127