Aquí hay un ejemplo simple:
PS1='$? > '
Si usa comillas dobles, entonces debe agregar una barra invertida para escapar de $:
PS1="\$? > "
Salida:
0 > echo 'ok'
ok
0 > bogus
bogus: command not found
127 >
Una forma aún mejor es imprimir solo el código de salida cuando no es cero.
PS1='${?#0}> ' # single quote example
PS1="\${?#0}> " # double quote example (requires extra backslash)
Salida de muestra:
> echo 'ok'
ok
> bogus
bogus: command not found
127>
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 eliminando 0desde el frente de $?, lo que efectivamente truncaría un código de salida de 0.
Si usa comillas dobles, $?se sustituirá cuando PS1se establece, en lugar de ser evaluado cada vez. Haga echo $PS1para confirmar que no tiene un valor codificado PS1.