Todo comando executado no bash retorna com um código de saída.
Sempre que eu digitar um comando no prompt do bash, quero que ele mostre o status de saída, ou seja, echo $?
por exemplo, se eu executar echo "hello";
no prompt do bash, a saída deve ser:
linux@linux$ hello
linux@linux$ 0
Respostas:
O código de saída do último comando executado é armazenado na
$?
variável de ambiente. Portanto, você pode adicionar essa variável ao prompt de comando padrão e sempre terá o código de saída impresso lá. O prompt é armazenado na$PS1
variável de ambiente. Ele é inicialmente definido no/etc/bash.bashrc
script e posteriormente no$HOME/.bashrc
.Portanto, edite a linha
$HOME/.bashrc
(/etc/bash.bashrc
seria para todo o sistema) a partir do valor padrão:para isso (por exemplo):
Portanto, o prompt padrão foi alterado para:
O 0 entre colchetes é o seu código de saída, consulte:
Para os significados, consulte http://www.tldp.org/LDP/abs/html/exitcodes.html
fonte
readlink /proc/$$/exe
por favor? 0 significa que não há erro, você tentou algo que dê um erro:^C
oufalse
ouasdasdasd
?PS1=$(printf "%s\\\\u@\h:%s%s\w[$?]$%s " "$yellow" "$end" "$blue" "$end")
, mas ele mostra0
o tempo todo. Alguma idéia do porquê?$?
já está expandido para0
quando definir o seuPS1
. Façaecho $PS1
e você verá. Você precisa usar aspas simples ou escapar como ele\$?
.Outra maneira que eu escolhi no Arch Wiki foi usar
trap
:Efeito:
fonte
Aqui está um exemplo simples:
Se você estiver usando aspas duplas, adicione uma barra invertida para escapar do
$
:Resultado:
Uma maneira ainda melhor é imprimir apenas o código de saída quando for diferente de zero.
Saída de amostra:
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 removendo0
da frente do arquivo$?
, o que truncaria efetivamente um código de saída de0
.Se estiver usando aspas duplas,
$?
será substituído quandoPS1
estiver definido, em vez de ser avaliado todas as vezes. Façaecho $PS1
para confirmar que você não tem um valor codificado emPS1
.fonte