Yanıtlar:
Evet, iki yolu var. Bir sette etmektir PROMPT_COMMANDiçinde .bashrcdiğer, - set komutu ikamesi için PS1için echo $?komuta.
Yöntem 1:
Bash manuel sayfasından:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.
Bu değişkeni ne yaparsanız ayarlayın, her seferinde bilgi istemi çizilmeden önce çalıştırılır. 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
$>
Kullanımına dikkat edin \$?. Kalıcı değişiklik için, kaydedin.bashrc
Yöntem 2
İstemimin PS1şu şekilde ayarlandığını varsayalım :
PS1='
user@ubuntu:$> '
Bu istem ekranda (her önceki komut çalıştırıldıktan sonra olan) her yeniden çizildiğinde bir program çalıştırmak isterseniz, kullanmanız command substitution $(. . .) ve istemde bu şekilde ayarlamanız gerekir:
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 ]
$>_
PS1'imi üst [ exitcode ]ve alt olmak üzere iki satıra böldüğüme dikkat edin $> <blank space>'. Orada nedeni budur >önce $> '(lider ikinci satırda >ise PS2satırlı komutlar için istemi). Alternatif olarak, böyle bir şey yapabilirsiniz ( $'...'yapıyı fark edin ):
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>
PS1kullanıcı girişi almadan önce yazdırılan metindir - bundan başka bir şey değildir. Parametre genişletme ve komut ikamelerine karşı bağışık değildir, bu nedenle $(...)örneğin içine bir şey koyabilirsiniz $( pwd )ve orada gösterecektir. Bunu dizüstü pil gücünü göstermek için özel bir komut dosyası ile kullandım, örneğin
I toplanan bir yöntem Arch Wiki etmektir trap ERR. trapBash'te bir sinyal alındığında veya diğer bazı olaylar için komut çalıştırmak için kullanılır. ERRGeçerli komut satırı bir hatayla sonlandığında bir tuzak çalıştırılır - dönüş değeri 0 değildir. (Normal olarak sonlandırılırsa, dönüş değeri açıkça 0 olur).
Yani mesela:
trap 'printf "\ncode %d\n\n" $?' ERR
Sonra:
$ echo foo
foo
$ false
code 1
$
(Not: echobaşarıyla çalıştırılan komuttan sonra mesaj yok - Bir komut yazdığımda ve terminal hiçbir şey yapmadığında ne anlama gelir? )
Arch Wiki ipucu devam etti ve mesajı renklendirdi, böylece fark edilir bir sarı mesaj elde ettiniz:
EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR
Etki:
Aslında, tek yapmam gereken codeçıktıdaki bir komutun başarısız olduğunu bilmesi için sarıya dikkat etmektir.