Để kiểm tra xem một số lệnh có hoạt động thành công hay không, bạn có thể kiểm tra trạng thái trả về , được đưa ra bởi $?
, của lệnh trước đó bằng:
echo $?
Trạng thái trả về 0
có nghĩa là lệnh đã hoàn thành thành công, trong khi đầu ra khác không ( mã lỗi ) có nghĩa là một số vấn đề đã gặp phải hoặc có lỗi và có thể biết danh mục từ mã lỗi. Mã lỗi Linux / C được định nghĩa trong /usr/include/asm-generic/errno-base.h
và /usr/include/asm-generic/errno.h
.
Cũng trong bash, .bashrc
định nghĩa một bí danh alert
có thể được sử dụng để thông báo với trạng thái hoàn thành. Bạn sẽ phải đính kèm bí danh với lệnh hoặc lệnh kết hợp như thế này:
some_command --some-switch; alert
Bạn có thể nối dòng mã sau vào ~/.bashrc
tệp của mình để hiển thị trạng thái trả về của lệnh cuối cùng được thực thi ..
# show the return code of last command executed
PS1='${debian_chroot:+($debian_chroot)}\u@\h(lst ret. $(echo $?) ):\w\$ '
(mở tệp ~/.bashrc
bằng trình soạn thảo văn bản bạn chọn và sao chép dòng trên, dán tệp vào tệp và lưu. Khởi chạy phiên bản mới của thiết bị đầu cuối và bạn nên có nó trong hành động. Hoặc thay vào đó bạn có thể xác định một số chức năng và sử dụng nó PS1
giống như được minh họa dưới đây.)
một bản demo nhỏ:
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
Chỉ chơi với PS1
:) ..một chút nữa,
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\$ '
(bạn có thể sửa đổi chức năng để làm cho nó lạ mắt hơn, giống như @gronostaj làm trong bài đăng của anh ấy.)