Respuestas:
Sí, hay dos formas. Una de ellas es conjunto PROMPT_COMMAND
en .bashrc
el otro - para configurar la sustitución de comandos en PS1
el echo $?
comando.
Método 1:
Desde la página de manual de bash:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.
Independientemente de lo que establezca esta variable, se ejecutará antes de dibujar la solicitud cada vez. Manifestación:
$> PROMPT_COMMAND=" echo 'Last command exited with' \$? 'code' "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$>
Tenga en cuenta el uso de \$?
. Para un cambio permanente, guárdelo en.bashrc
Método 2
Supongamos que mi PS1
solicitud se establece así:
PS1='
user@ubuntu:$> '
Si quiero ejecutar algún programa cada vez que este indicador se vuelve a dibujar en la pantalla (que es después de que se ejecuta cada comando anterior), necesitaría usarlo command substitution $(. . .)
y configurarlo en el indicador de la siguiente manera:
PS1=' [ $? ]
user@ubuntu: $> '
Manifestación:
$> PS1=' [ $? ]
> $>_ '
[ 0 ]
$>_ ls /etc/passwd > /dev/null
[ 0 ]
$>_ ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
[ 2 ]
$>_
Tenga en cuenta que dividí mi PS1 en dos líneas, la superior tendrá [ exitcode ]
y la inferior $> <blank space>'
. Es por eso que hay >
antes $> '
en la segunda línea (el inicio >
es un PS2
aviso para comandos multilínea). Alternativamente, podría hacer algo como esto (observe la $'...'
estructura):
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>
PS1
es solo texto que se imprime antes de recibir la entrada del usuario, nada más que eso. No es inmune a la expansión de parámetros y a las sustituciones de comandos, por lo que puede poner cualquier cosa $(...)
, por ejemplo, $( pwd )
y se mostrará allí. Lo he usado con un script personalizado para mostrar la energía de la batería de la computadora portátil, por ejemplo
Un método que elegí de Arch Wiki es trap
ERR
. trap
se usa en Bash para ejecutar comandos cuando se recibe una señal o para ciertos otros eventos. Se ERR
ejecuta una captura cada vez que la línea de comando actual termina con un error: el valor de retorno no es 0. (Si terminara normalmente, el valor de retorno obviamente sería 0.)
Así por ejemplo:
trap 'printf "\ncode %d\n\n" $?' ERR
Entonces:
$ echo foo
foo
$ false
code 1
$
(Nota: ningún mensaje después del echo
comando que se ejecutó correctamente: ¿qué significa cuando escribo un comando y el terminal no hace nada? )
La sugerencia de Arch Wiki continuó y coloreó el mensaje, para que recibas un mensaje amarillo notable:
EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR
Efecto:
En efecto, todo lo que necesito hacer es estar atento a un color amarillo code
en la salida para saber que un comando falló.