Aqui está um exemplo simples:
PS1='$? > '
Se você estiver usando aspas duplas, adicione uma barra invertida para escapar do $:
PS1="\$? > "
Resultado:
0 > echo 'ok'
ok
0 > bogus
bogus: command not found
127 >
Uma maneira ainda melhor é imprimir apenas o código de saída quando for diferente de zero.
PS1='${?#0}> ' # single quote example
PS1="\${?#0}> " # double quote example (requires extra backslash)
Saída de amostra:
> echo 'ok'
ok
> bogus
bogus: command not found
127>
Explicação: ${var#pattern}é uma expansão de parâmetro bash que significa remover o menor padrão de correspondência da frente de $ var. Portanto, neste caso, estamos removendo 0da frente do arquivo $?, o que truncaria efetivamente um código de saída de 0.
Se estiver usando aspas duplas, $?será substituído quando PS1estiver definido, em vez de ser avaliado todas as vezes. Faça echo $PS1para confirmar que você não tem um valor codificado em PS1.