GNU/Linux >> Tutoriales Linux >  >> Linux

Bash Prompt con el último código de salida

Como está comenzando a bordear una PS1 compleja, podría considerar usar PROMPT_COMMAND .
Con esto, lo configura en una función y se ejecutará después de cada comando para generar el aviso.

Podría intentar lo siguiente en su ~/.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}"
}

Esto debería hacer lo que suena la línea que desea. Eche un vistazo al subarchivo de mi bashrc si desea ver todas las cosas que hago con mi __prompt_command función.


Si no desea utilizar el comando de aviso, debe tener en cuenta dos cosas:

  1. obtener el valor de $? antes que nada, de lo contrario se anulará
  2. escapar todos los $ en la PS1 (para que no se evalúe cuando lo asigne)

Ejemplo práctico usando una variable

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

Ejemplo de trabajo sin una variable

Aquí el if debe ser lo primero, antes de cualquier comando que anule el $? .

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

Observe cómo el \$() se escapa, por lo que no se ejecuta de inmediato, sino cada vez que se usa PS1. También todos los usos de \$?


Quería mantener los colores predeterminados de Debian, imprimir el código exacto y solo imprimirlo en caso de falla:

# 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. Códigos de salida de la línea de comandos de Bash desmitificados

  2. ¿Cómo evaluará Bash el siguiente código?

  3. Alias ​​con variable en bash

  4. Bash:esperar con tiempo de espera

  5. ¿Por qué salir del código 141 con grep -q?

Prepara tu indicador de Bash para el invierno en Linux

Cómo personalizar Bash Prompt en Linux

Comando de salida de Bash y códigos de salida

¿Qué son los códigos de salida de Bash en Linux?

nombre base con espacios en un script bash?

Eliminar la contraseña ingresada en la solicitud de contraseña oculta (Linux) con acceso directo