cmd && echo "$?"จะไม่ทำงานเนื่องจากจำเป็นต้องพิมพ์เลขศูนย์เท่านั้น ( echoจะดำเนินการเฉพาะเมื่อสำเร็จคำสั่งก่อนหน้านี้เท่านั้น)
นี่คือฟังก์ชั่นเปลือกสั้นสำหรับคุณ:
tellexit () {
    "$@"
    local err="$?"
    printf 'exit code\t%d\n' "$err" >/dev/tty
    return "$err"
}
สิ่งนี้จะพิมพ์รหัสออกของคำสั่งที่กำหนดในลักษณะที่คล้ายกับtimeคำสั่ง
$ tellexit echo "hello world"
hello world
exit code       0
$ tellexit false
exit code       1
โดยการเปลี่ยนเส้นทางprintfไปยัง/dev/ttyในฟังก์ชั่นเรายังคงสามารถใช้tellexitกับการเปลี่ยนเส้นทางโดยไม่ได้รับขยะในเอาต์พุตมาตรฐานหรือสตรีมข้อผิดพลาด:
$ tellexit bash -c 'echo hello; echo world >&2' >out 2>err
exit code       0
$ cat out
hello
$ cat err
world
ด้วยการบันทึกรหัสการออกในตัวแปรเราสามารถคืนค่ามันไปยังผู้เรียก:
$ tellexit false || echo 'failed'
exit code       1
failed
ฟังก์ชั่นรุ่นเดียวกันที่ดีกว่านี้จะพิมพ์สัญญาณที่ฆ่าคำสั่งหากรหัสออกมีค่ามากกว่า 128 (ซึ่งหมายความว่าจะสิ้นสุดลงเนื่องจากสัญญาณ):
tellexit () {
    "$@"
    local err="$?"
    if [ "$err" -gt 128 ]; then
        printf 'exit code\t%d (%s)\n' "$err" "$(kill -l "$err")" >/dev/tty
    else
        printf 'exit code\t%d\n' "$err" >/dev/tty
    fi
    return "$err"
}
การทดสอบ:
$ tellexit sh -c 'kill $$'
exit code       143 (TERM)
$ tellexit sh -c 'kill -9 $$'
Killed
exit code       137 (KILL)
( localสิ่งนี้ต้องการash/ pdksh/ bash/ zshหรือคุณสามารถเปลี่ยนให้typesetเชลล์อื่นเข้าใจได้สองสาม)
               
              
sleep 1 && echo $?จะพิมพ์รหัสของเซลล์ sleeper เมื่อมันเป็นศูนย์ ...