Eu estou querendo saber como definir a opção para imprimir automaticamente o valor de retorno após cada execução do programa no terminal sem digitar echo $?
.
É algo que pode ser configurado? Codeblocks tem esse recurso.
fonte
Eu estou querendo saber como definir a opção para imprimir automaticamente o valor de retorno após cada execução do programa no terminal sem digitar echo $?
.
É algo que pode ser configurado? Codeblocks tem esse recurso.
Sim, existem duas maneiras. Um deles é para conjunto PROMPT_COMMAND
em .bashrc
, o outro - a substituição de comando conjunto na PS1
para o echo $?
comando.
Método 1:
Na página do manual do bash:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.
O que quer que você defina essa variável, será executado antes de desenhar o prompt a cada vez. Demo:
$> PROMPT_COMMAND=" echo 'Last command exited with' \$? 'code' "
Last command exited with 0 code
$> ls /etc/passwd > /dev/null
Last command exited with 0 code
$> ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
Last command exited with 2 code
$>
Observe o uso de \$?
. Para alteração permanente, salve-a em.bashrc
Método 2
Suponha que meu PS1
prompt seja definido assim:
PS1='
user@ubuntu:$> '
Se eu quiser executar algum programa sempre que esse prompt for redesenhado na tela (que é após a execução de cada comando anterior), eu precisaria usá command substitution $(. . .)
-lo e configurá-lo no prompt da seguinte maneira:
PS1=' [ $? ]
user@ubuntu: $> '
Demo:
$> PS1=' [ $? ]
> $>_ '
[ 0 ]
$>_ ls /etc/passwd > /dev/null
[ 0 ]
$>_ ls /etc/asdf > /dev/null
ls: cannot access /etc/asdf: No such file or directory
[ 2 ]
$>_
Observe que eu divido meu PS1 em duas linhas, o topo terá [ exitcode ]
e o fundo $> <blank space>'
. É por isso que existe >
antes $> '
na segunda linha (o principal >
é o PS2
prompt para comandos de várias linhas ). Como alternativa, você pode fazer algo assim (observe a $'...'
estrutura):
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>
PS1
é apenas um texto que está sendo impresso antes de receber a entrada do usuário - nada além disso. Não é imune à expansão de parâmetros e substituições de comandos; portanto, você pode colocar qualquer coisa$(...)
, por exemplo,$( pwd )
e isso seria mostrado lá. Eu usei isso com um script personalizado para mostrar a energia da bateria do laptop, por exemploUm método que eu escolhi no Arch Wiki é o de
trap
ERR
.trap
é usado no Bash para executar comandos quando um sinal é recebido ou para certos outros eventos. UmaERR
interceptação é executada sempre que a linha de comando atual termina com um erro - o valor de retorno não é 0. (Se foi encerrado normalmente, o valor de retorno seria obviamente 0.)Então, por exemplo:
Então:
(Nota: nenhuma mensagem após o
echo
comando ser executado com êxito - O que significa quando eu digito um comando e o terminal não faz nada? )A dica do Arch Wiki foi adiante e coloriu a mensagem, para que você receba uma mensagem amarela perceptível:
Efeito:
Na verdade, tudo o que preciso fazer é ficar atento a um amarelo
code
na saída para saber que um comando falhou.fonte