Para verificar se algum comando funcionou com sucesso ou não, você pode verificar o status de retorno , dado por $?
, do comando anterior com:
echo $?
Um status de retorno de 0
significa que o comando foi concluído com êxito, enquanto uma saída diferente de zero ( código de erro ) significa que alguns problemas foram encontrados ou há um erro e a categoria pode ser conhecida do código de erro. Os códigos de erro do Linux / C são definidos em /usr/include/asm-generic/errno-base.h
e /usr/include/asm-generic/errno.h
.
Também no bash, o .bashrc
define um alias alert
, que pode ser usado para notificar com o status de conclusão. Você teria que anexar o alias com o comando ou combinação de comando assim:
some_command --some-switch; alert
Você pode anexar a seguinte linha de código ao seu arquivo ~/.bashrc
para exibir o status de retorno do último comando executado.
# show the return code of last command executed
PS1='${debian_chroot:+($debian_chroot)}\u@\h(lst ret. $(echo $?) ):\w$ '
(abra o arquivo ~/.bashrc
com o editor de texto de sua escolha, copie a linha acima, cole-a no arquivo e salve. Inicie uma nova instância do terminal e você deverá executá-la em ação. poderia definir alguma função e usá-lo com PS1
, como ilustrado abaixo.)
uma pequena demonstração:
hash@precise(lst ret. 0 ):~$ ls -sh someFileThatsNotThere
ls: cannot access someFileThatsNotThere: No such file or directory
hash@precise(lst ret. 2 ):~$
hash@precise(lst ret. 2 ):~$ aCommandThatsNot
aCommandThatsNot: command not found
hash@precise(lst ret. 127 ):~$
hash@precise(lst ret. 127 ):~$ echo "you should get a lst ret. 0, I believe the system has echo installed :)"
you should get a lst ret. 0, I believe the system has echo installed :)
hash@precise(lst ret. 0 ):~$
hash@precise(lst ret. 0 ):~$ sudo touch /tmp/someTestFile
[sudo] password for hash:
hash@precise(lst ret. 1 ):~$
hash@precise(lst ret. 1 ):~$ chown $USER:$USER /tmp/someTestFile
chown: changing ownership of '/tmp/someTestFile': Operation not permitted
Apenas jogando com PS1
:) ..um pouco mais,
function showRetStat {
## line1: initiliazing retStat with the return status of the previous command
retStat=$?
## line2: Left padding the return status with spaces. If you prefer the unpadded one, you can just replace
# $retStatFtd in the lines initializing noErrStr and errStr among other possible ways.
retStatFtd=$(sed -e :a -e 's/^.\{1,2\}$/ &/;ta' <<< $retStat)
## lines3&4: Setting the strings to display for a successful and unsuccessful run of previous command
# which we are going to display with the prompt string. Change the strings to display text of your
# choice like you may set noErrStr="yippie!" , errStr="oopsie!" in place of what they're now.
noErrStr="retStat "$retStatFtd" :: PASS ^_^"
errStr="retStat "$retStatFtd" :: FAIL x_x"
## line5: Applying the logic and display the proper string at the prompt. Space padded number i.e. retStatFtd, here,
# worked in the logic, originally I intended to use this for the display while retStat in the conditional
# check; you could make the function one statement less if you want to.
echo "$([ $retStatFtd = 0 ] && echo "$noErrStr" || echo "$errStr")"
}
## Combining the function showRetStat into the prompt string.
PS1='${debian_chroot:+($debian_chroot)}\u@\h($(showRetStat)):\w$ '
(você pode modificar a função para torná-la mais chique, algo como @gronostaj faz em seu post.)