Agentic Research

Exit Code(結束代碼)

又稱:退出碼 · 結束代碼 · exit status · $?

程式結束時交回的一個整數:0=成功、非 0=失敗 —— 程式向外面的世界報告「辦得怎樣」的方式。

你會在什麼時候遇到它

腳本、CI、AI agent 判斷「上一步成不成功」,靠的不是閱讀輸出文字,而是看這一個整數。agent 那句「失敗就換個方法再試」的迴圈,鉸鏈就是它。不認識結束代碼,你就看不懂 agent 為什麼在一次失敗後自動重試,也看不懂它為什麼在指令「看起來有輸出」時照樣往下衝 —— 因為它看到的是 0。

打個比方

像送貨單據上的簽收欄:收件的人不會唸一篇報告給你聽,只會簽收(0)或拒收(非 0)。包裹裡裝了什麼(stdout)和這趟送貨成不成功,是兩件事。

最小範例

true;  echo $?                        # 0:成功
false; echo $?                        # 1:失敗
ls /not-exist 2>/dev/null; echo $?    # 非 0:失敗(數字是程式自己定義的)

false || echo "上一個失敗了(非 0),所以我執行了"
true  && echo "上一個成功了(0),所以我執行了"

$? 是「上一條指令的結束代碼」(bash/zsh;PowerShell 用 $LASTEXITCODE)。非 0 的數字含義由各程式自定,但 shell 有幾個通用慣例:127=找不到指令、130=被 Ctrl+C 中斷。|| 是「前一個失敗才執行下一個」、&& 是「前一個成功才執行下一個」—— 自動化腳本就是用這兩個符號搭出來的。

最常搞錯的地方

  • 用「輸出看起來正不正常」判斷成敗。程式可以印出完全像樣的日誌、卻以非 0 結束;也可以刷一屏警告、結束代碼仍是 0。腳本、CI 和 agent 只信數字,不看演出。
  • 一串指令只看最後一條的結束代碼。中間的失敗會被後面執行的指令蓋掉;所以腳本用 set -e(bash)讓任何一步失敗就立刻停,設計良好的 agent 則每一步都檢查數字。

相關詞條

下一步