簡體   English   中英

Bash IF無法正常工作

[英]Bash IF not working as expected

我正在嘗試從PS1調用一個函數,該函數根據內容是什么輸出不同顏色的內容。

  • 在這種情況下是$? ,程序的退出狀態。
  • 如果出口狀態不是0我試圖使該函數輸出紅色文本。
  • 我已經嘗試了所有可能的變體,在條件中表示該變量的方式等等,但是它不起作用。

而不是輸出我期望的結果,或者在該IF一個變體中始終是$LRED ,或者在該IF另一變體中總是$HII

所有相關的BASH都張貼在下面,你們能提供任何見解嗎?

...

# Custom Colour Alias
NM="\[\033[0;38m\]" # No background and white lines
HI="\[\033[1;36m\]" # Username colour
HII="\[\033[0;37m\]" # Name colour
SI="\[\033[1;32m\]" # Directory colour
IN="\[\033[0m\]" # Command input color
LRED="\[\033[1;31m\]"
BRW="\[\033[0;33m\]"

...

exitStatus ()
{
    if [ $? -ne 0 ]
        then
            echo "$LRED\$?"
        else
            echo "\$?"
    fi
    #echo \$?
}

...

export PS1="\n$HII[ $LRED\u $SI\w$NM $HII]\n[ \! / \# / $(exitStatus) $HII]$LRED $ $IN"

基於解決方案的代碼

這是我根據以下公認的答案所做的。

# Before Prompt
export PROMPT_COMMAND='EXSO=$?;\
    if [[ $EXSO != 0 ]];\
        then\
            ERRMSG="$LRED$EXSO";\
        else\
            ERRMSG="$EXSO";\
    fi;\
PS1="\n$HII[ $LRED\u $SI\W$NM $HII\! / \# / $ERRMSG $HII] $SI$ $IN";'

問題在於您對PS1的分配僅評估一次,因此exitStatus僅被調用一次。 正如Nirk提到的,您應該使用PROMPT_COMMAND。 將其設置為要在顯示每個新提示之前執行的命令。 一個例子:

PROMPT_COMMAND='if [ $? -ne 0 ]; then echo -n FAIL:;fi'

如果先前的命令失敗,則會在每個新提示前大喊失敗:

mogul@linuxine:~$ date
Sun Sep 29 21:13:53 CEST 2013
mogul@linuxine:~$ rm crappy_on_existent_file
rm: cannot remove ‘crappy_on_existent_file’: No such file or directory
FAIL:mogul@linuxine:~$ 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM