GNU/Linux >> Znalost Linux >  >> Linux

Bash Prompt s posledním výstupním kódem

Protože začínáte hraničit se složitým PS1, můžete zvážit použití PROMPT_COMMAND .
Tímto jej nastavíte na funkci a bude spuštěna po každém příkazu pro vygenerování výzvy.

Můžete zkusit následující ve vašem ~/.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}"
}

Tohle by mělo dělat to, co zní, jak chcete. Podívejte se do subsouboru mého bashrca, pokud chcete vidět všechny věci, které dělám se svým __prompt_command funkce.


Pokud nechcete používat příkaz prompt, je třeba vzít v úvahu dvě věci:

  1. získáte hodnotu $? před čímkoli jiným, jinak bude přepsán
  2. uniknutí všech $ v PS1 (takže se to při přiřazení nevyhodnocuje)

Pracovní příklad s použitím proměnné

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

Pracovní příklad bez proměnné

Zde musí být if první věcí před jakýmkoli příkazem, který by přepsal $? .

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

Všimněte si, jak \$() je escapováno, takže se nespustí hned, ale při každém použití PS1. Také všechna použití \$?


Chtěl jsem zachovat výchozí barvy Debianu, vytisknout přesný kód a vytisknout jej pouze v případě selhání:

# 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. Ukončovací kódy příkazového řádku Bash byly demystifikovány

  2. Jak zkrátit Bash Prompt v Linuxu?

  3. Bash Shell Exit Status Tutorial s praktickými příklady

  1. Alias ​​s proměnnou v bash

  2. základní jméno s mezerami ve skriptu bash?

  3. Bash:počkejte s časovým limitem

  1. Výstupní kód přiřazení proměnné k substituci příkazu v Bash

  2. Aplikace C++ končí s ukončovacím kódem 143 - co to znamená?

  3. Zaokrouhlování čísel s bc v Bash