Aby sprawdzić, czy niektóre polecenia działały poprawnie, możesz sprawdzić status powrotu podany przez $?poprzednie polecenie za pomocą:
echo $?
Status powrotu 0oznacza, że polecenie zakończyło się pomyślnie, a niezerowe wyjście ( kod błędu ) oznacza, że napotkano pewne problemy lub wystąpił błąd, a kategoria może być znana z kodu błędu. Kody błędów systemu Linux / C są zdefiniowane w /usr/include/asm-generic/errno-base.hi /usr/include/asm-generic/errno.h.
Również w bash .bashrcdefiniuje alias, alertktórego można użyć do powiadomienia o stanie ukończenia. Musisz dołączyć alias za pomocą polecenia lub zestawu poleceń w następujący sposób:
some_command --some-switch; alert
Możesz dołączyć następujący wiersz kodu do swojego ~/.bashrcpliku, aby wyświetlić status powrotu ostatniego wykonanego polecenia.
# show the return code of last command executed
PS1='${debian_chroot:+($debian_chroot)}\u@\h(lst ret. $(echo $?) ):\w\$ '
(otwórz plik za ~/.bashrcpomocą edytora tekstu i skopiuj powyższą linię, wklej go do pliku i zapisz. Uruchom nową instancję terminala, a powinieneś mieć ją w akcji. Lub zamiast tego możesz zdefiniować jakąś funkcję i użyć z PS1podobnymi jak pokazano poniżej.)
małe demo:
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
Po prostu PS1bawię się :) .. trochę więcej,
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\$ '
(możesz zmodyfikować funkcję, aby była bardziej fantazyjna, coś takiego jak @gronostaj robi w swoim poście).