Bash
如果返回錯誤,則在 Bash 提示符中顯示最後一個命令的退出程式碼
我已將最後一個命令的返回值添加到
PS1
我的.bashrc
.現在我想讓它僅在值非零時顯示。
Android的shell有它:
${| local e=$? (( e )) && REPLY+="$e|" return $e }
**問題:**如何將其轉換為 bash?
PS1='${?#0}$ '
它使用了一種特殊形式的參數擴展,
${?#0}
,意思是:“如果它是 的第一個字元,則刪除字元零,${?}
前一個命令的退出程式碼。”如果最後一個退出程式碼不為零,您還可以更改提示的顏色:
PS1='\[\e[0;$(($?==0?0:91))m\]$ \[\e[0m\]'
如果最後一個命令以非零退出,則使用if-else 三元表達式
$(($?==0?0:91))
生成顏色程式碼0;91m
(紅色,請參見顏色程式碼0;0m
),否則(您的預設顏色)。
這是我在我的
.bashrc
:PS1_PROMPT() { local e=$? (( e )) && printf "$e|" return $e } PS1='$(PS1_PROMPT)'"$PS1"
ibug@example:~ $ false 1|ibug@example:~ $ ^C 130|ibug@exame:~ $ true ibug@example:~ $
與 JoL 的答案相比,這具有優勢,即
$?
在顯示 (viareturn $e
) 後保留 的值。它基本上也是對 Android 預設設置的返工,/system/etc/mkshrc
可以完成相同的工作。請注意,
$(PS1_PROMPT)
它包含在單引號中,因為$PS1
除了在變數賦值表達式中設置之外,每次列印時都會對其進行評估,因此單引號會阻止它立即被評估,而是將其推遲到列印時。或者,正如 ilkkachu 所建議的,您可以使用 Bash
PROMPT_COMMAND
特殊變數:PS1_PROMPT() { local e=$? PROMPT_ECODE= (( e )) && PROMPT_ECODE="$e|" return $e } PROMPT_COMMAND=PS1_PROMPT PS1='$PROMPT_ECODE'"$PS1"
這有一個優點,即每次列印 PS1 時都不會生成子外殼。