Terminal

在終端中的每個命令後列印退出狀態程式碼

  • May 26, 2022

我想在 zsh 退出程式碼值中列印每個已發布的命令。例如

$ cat file_not_present
cat: file_not_present: No such file or directory
Exit code 1

我只知道我可以列印在終端中啟動的最後一個命令的錯誤程式碼

$ echo $?

我能怎麼做?

就我個人而言,我添加%(?..%B(%?%)%b)$PROMPT, 以便前一個命令的退出狀態在不成功的情況下以粗體顯示在括號中,這比列印每個命令的退出狀態更具侵入性。

要列印每個失敗命令的退出狀態,您可以執行以下操作:

TRAPERR() print -u2 Exit status: $?
$假;錯誤的; (123號出口)
退出狀態:1
退出狀態:1
退出狀態:123
**(123)**$ 

(123)$來自$PROMPT上述的存在)。

對於每個命令:

TRAPDEBUG() print -u2 Exit status: $?

但這可能會變得非常煩人。

您還可以列印執行的最後一個命令的退出狀態:

print_last_status() print -u2 Exit status: $?
precmd_functions+=(print_last_status)
$ false; (exit 123); true
Exit status: 0

與該$PROMPT方法一樣,您只能在上一個提示符發送的命令行中看到最後一個命令執行的狀態。

在任何情況下,在 stderr 上列印它(就像我在上面用 做的那樣-u2)可能會比在 stdout 上列印它引起的問題更少。做起來print Exit status: $? > /dev/tty可能會更好。

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