Sim, existem duas maneiras. Uma é definir PROMPT_COMMAND
em .bashrc
, a outra - para definir a substituição de comando em PS1
para o comando echo $?
.
Método 1:
Na página de 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. Demonstração:
$> 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ções permanentes, salve-o em .bashrc
Método 2
Suponha que o prompt PS1
esteja definido assim:
PS1='
user@ubuntu:$> '
Se eu quiser executar algum programa toda vez que esse prompt for redesenhado na tela (que é depois de cada comando anterior), eu precisaria usar command substitution $(. . .)
e configurá-lo no prompt da seguinte forma:
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 ]
$>_
Repare que divido meu PS1 em duas linhas, a parte superior terá [ exitcode ]
e inferior $> <blank space>'
. É por isso que há >
antes de $> '
na segunda linha (O prompt >
é PS2
inicial para comandos de múltiplas linhas). Como alternativa, você poderia fazer algo assim (observe a estrutura $'...'
):
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>