Prompt
BASH:如何將退出程式碼保存在 PS1 中以便以後在 PS1 中使用?
我正在嘗試通過以下方式自定義我的 PS1(我已經刪除了顏色):
PS1='\u@\h:\w$(git_branch)$(useExitCode)\$ '
在哪裡
git_branch() { git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/(\1)/' }
至於退出狀態,我想在函式執行前把它撿起來,在. 我怎樣才能做到這一點?後一個函式可能如下所示:
git_branch``useExitCode
useExitCode() { local exitCode=${1} if [[ ${exitCode} == 0 ]]; then echo ':)' else echo ':(' fi }
問題是,如何將退出程式碼儲存在 PS1 中並稍後使用?
像下面這樣的東西不起作用,但給出了大方向的想法:
PS1='exitCode=$?\u@\h:\w$(git_branch)$(useExitCode ${exitCode})\$ '
上面的回顯是“exitCode=0”(或=1)部分,但它沒有被儲存,因此在稍後呼叫“${exitCode}”時它是空的。
我會為此使用
PROMPT_COMMAND
變數:PROMPT_COMMAND='lstatus=$?' PS1='$(false)$(exit 3)<$lstatus> ' <0> sh -c 'exit 17' <17> echo $? 17 <0>
從
bash(1)
手冊頁:PROMPT_COMMAND 如果設置,則在發出每個主要提示之前將該值作為命令執行。
我對我的提示做了類似的事情,這就是我如何去“
git
在我的提示中獲取分支,同時仍然顯示最後一個命令的退出程式碼”的事情:parse_git_branch() { exit_code=$? local stdcolor local branchcolor local lines stdcolor="^[[0;32m" if [[ -d ./.git ]] || $( git status > /dev/null 2>&1 ); then lines=$(git status -s | wc -l) if [[ 0 -eq ${lines} ]]; then # Working copy is clean branchcolor="^[[1;32m" elif git status -s 2> /dev/null | grep -q '^A'; then # If we have staged commits waiting, red; else yellow branchcolor="^[[1;31m" else branchcolor="^[[1;33m" fi git branch 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/ $stdcolor($branchcolor\1$stdcolor)/" fi return $exit_code } export PS1='\[\e]0;\u@\h: \w\a\]\[\e[38;5;14m\]\u\[\e[38;5;8m\]@\[\e[38;5;6m\]\h\[\e[38;5;8m\]:\[\e[38;5;10m\]\w'"\$(parse_git_branch) \e[31m\${?##0}\n"'\[\e[$(((($?>0))*31))m\]\$\[\e[0m\] '
(經過清理的)結果提示及其在
git
工作區中的外觀:me@host:~/src/project (devel) $ false me@host:~/src/project (devel) 1 $ true me@host:~/src/project (devel) $
這一切的結果是:
- 如果我在
git
工作區中,則會顯示我目前的分支。綠色表示乾淨,黃色表示臟,紅色表示有暫存文件等待送出- 如果最後一個命令的退出程式碼不為零,它會在提示符中顯示(紅色),我仍然可以訪問
$?
.