GNU/Linux >> Linux の 問題 >  >> Linux

最後の終了コードを含む Bash プロンプト

複雑な PS1 に近づき始めているので、PROMPT_COMMAND の使用を検討してください。 .
これを関数に設定すると、各コマンドの後に実行されてプロンプトが生成されます。

~/.bashrc で次のことを試すことができます

PROMPT_COMMAND=__prompt_command # Func to gen PS1 after CMDs

__prompt_command() {
    local EXIT="$?"             # This needs to be first
    PS1=""

    local RCol='\[\e[0m\]'

    local Red='\[\e[0;31m\]'
    local Gre='\[\e[0;32m\]'
    local BYel='\[\e[1;33m\]'
    local BBlu='\[\e[1;34m\]'
    local Pur='\[\e[0;35m\]'

    if [ $EXIT != 0 ]; then
        PS1+="${Red}\u${RCol}"      # Add red if exit code non 0
    else
        PS1+="${Gre}\u${RCol}"
    fi

    PS1+="${RCol}@${BBlu}\h ${Pur}\W${BYel}$ ${RCol}"
}

__prompt_command で私が行っているすべてのことを見たい場合は、私のbashrcのサブファイルを見てください。 関数。


プロンプト コマンドを使用したくない場合は、次の 2 つの点を考慮する必要があります。

<オール>
  • $ の値を取得していますか?そうしないと上書きされます
  • PS1 内のすべての $ をエスケープします (そのため、割り当て時に評価されません)
  • 変数を使用した実際の例

    PS1="\$(VALU="\$?" ; echo \$VALU ; date ; if [ \$VALU == 0 ]; then echo zero; else echo nonzero; fi) " 
    

    変数を使用しない例

    ここでは、$? をオーバーライドするコマンドの前に、最初に if を指定する必要があります。 .

    PS1="\$(if [ \$? == 0 ]; then echo zero; else echo nonzero; fi) "
    

    \$() が はエスケープされるため、すぐには実行されませんが、PS1 が使用されるたびに実行されます。また、\$? のすべての用途


    デフォルトの Debian カラーを維持し、正確なコードを印刷し、失敗した場合にのみ印刷したいと考えました:

    # Show exit status on failure.
    PROMPT_COMMAND=__prompt_command
    
    __prompt_command() {
        local curr_exit="$?"
    
        local BRed='\[\e[0;91m\]'
        local RCol='\[\e[0m\]'
    
        PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\[email protected]\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    
        if [ "$curr_exit" != 0 ]; then
            PS1="[${BRed}$curr_exit${RCol}]$PS1"
        fi
    }
    

    Linux
    1. Bashコマンドラインの終了コードがわかりやすく説明されています

    2. Bash -cと位置パラメータ?

    3. Bashは次のコードをどのように評価しますか?

    1. Linux の Bash 終了コードとは

    2. 非表示のパスワード プロンプトで入力したパスワードをショートカットで削除する (Linux)

    3. bashコードで正規表現を使用する場合

    1. LinuxでBashプロンプトをWinterize

    2. LinuxでBashプロンプトを短縮する方法は?

    3. 例を含む Bash If-Else ステートメント