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$PS1variable de entorno. Inicialmente se establece en el/etc/bash.bashrcscript y luego en el$HOME/.bashrc.Así que edite la línea en
$HOME/.bashrc(/etc/bash.bashrcserí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/$$/exepor favor? 0 significa que no hay error, ¿has intentado algo que da un error:^Cofalseoasdasdasd?PS1=$(printf "%s\\\\u@\h:%s%s\w[$?]$%s " "$yellow" "$end" "$blue" "$end"), pero solo se muestra0todo el tiempo. ¿Alguna idea de por qué?$?ya está expandido a0cuando configura suPS1. Hazecho $PS1y 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 eliminando0desde el frente de$?, lo que efectivamente truncaría un código de salida de0.Si usa comillas dobles,
$?se sustituirá cuandoPS1se establece, en lugar de ser evaluado cada vez. Hagaecho $PS1para confirmar que no tiene un valor codificadoPS1.fuente