Cada comando ejecutado en bash regresa con un código de salida.
Cada vez que escribo un comando en bash prompt, quiero que muestre el estado de salida, es decir, echo $?
por ejemplo, si ejecuto echo "hello";
en bash prompt, la salida debería ser:
linux@linux$ hello
linux@linux$ 0
Respuestas:
El código de salida del último comando ejecutado se almacena en la
$?
variable de entorno. Por lo tanto, solo puede agregar esta variable al símbolo del sistema predeterminado y siempre tendrá el código de salida impreso allí. La solicitud se almacena en la$PS1
variable de entorno. Inicialmente se establece en el/etc/bash.bashrc
script y luego en el$HOME/.bashrc
.Así que edite la línea en
$HOME/.bashrc
(/etc/bash.bashrc
sería todo el sistema) desde su valor predeterminado:a esto (por ejemplo):
Entonces, la solicitud predeterminada cambió a:
El 0 entre paréntesis es su código de salida, vea:
Para los significados ver http://www.tldp.org/LDP/abs/html/exitcodes.html
fuente
readlink /proc/$$/exe
por favor? 0 significa que no hay error, ¿has intentado algo que da un error:^C
ofalse
oasdasdasd
?PS1=$(printf "%s\\\\u@\h:%s%s\w[$?]$%s " "$yellow" "$end" "$blue" "$end")
, pero solo se muestra0
todo el tiempo. ¿Alguna idea de por qué?$?
ya está expandido a0
cuando configura suPS1
. Hazecho $PS1
y verás. Tienes que sea para uso comillas simples, o escapar de ella como\$?
.Otra forma que elegí de Arch Wiki fue usar
trap
:Efecto:
fuente
Aquí hay un ejemplo simple:
Si usa comillas dobles, entonces debe agregar una barra invertida para escapar de
$
:Salida:
Una forma aún mejor es imprimir solo el código de salida cuando no es cero.
Salida de muestra:
Explicación:
${var#pattern}
es una expansión de parámetros bash que significa eliminar el patrón de coincidencia más corto del frente de $ var. Entonces, en este caso, estamos eliminando0
desde el frente de$?
, lo que efectivamente truncaría un código de salida de0
.Si usa comillas dobles,
$?
se sustituirá cuandoPS1
se establece, en lugar de ser evaluado cada vez. Hagaecho $PS1
para confirmar que no tiene un valor codificadoPS1
.fuente