ผมสงสัยว่าวิธีการตั้งค่าตัวเลือกในการพิมพ์ค่าตอบแทนอัตโนมัติหลังจากการดำเนินการทุกโปรแกรมใน terminal echo $?
โดยไม่ต้องพิมพ์
เป็นสิ่งที่สามารถตั้งค่าได้หรือไม่? Codeblocks มีคุณสมบัติดังกล่าว
ผมสงสัยว่าวิธีการตั้งค่าตัวเลือกในการพิมพ์ค่าตอบแทนอัตโนมัติหลังจากการดำเนินการทุกโปรแกรมใน terminal echo $?
โดยไม่ต้องพิมพ์
เป็นสิ่งที่สามารถตั้งค่าได้หรือไม่? Codeblocks มีคุณสมบัติดังกล่าว
คำตอบ:
ใช่มีสองวิธี หนึ่งคือการตั้งค่าPROMPT_COMMAND
ใน.bashrc
อื่น ๆ - การตั้งค่าการทดแทนคำสั่งPS1
สำหรับecho $?
คำสั่ง
วิธีที่ 1:
จากหน้าคู่มือทุบตี:
PROMPT_COMMAND
If set, the value is executed as a command prior to issuing each primary prompt.
สิ่งที่คุณตั้งค่าตัวแปรนี้เป็นจะถูกเรียกใช้ก่อนที่จะวาดพรอมต์ในแต่ละครั้ง การสาธิต:
$> 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
$>
\$?
หมายเหตุการใช้งานของ สำหรับการเปลี่ยนแปลงถาวรให้บันทึกไว้.bashrc
วิธีที่ 2
สมมติว่าPS1
พรอมต์ของฉันถูกตั้งค่าเช่นนี้:
PS1='
user@ubuntu:$> '
ถ้าฉันต้องการเรียกใช้บางโปรแกรมในแต่ละครั้งที่พรอมต์นี้ปรากฏขึ้นมาใหม่บนหน้าจอ (ซึ่งเป็นหลังจากที่คำสั่งก่อนหน้านี้รัน) ฉันจะต้องใช้command substitution $(. . .)
และตั้งค่าในพรอมต์ดังนี้:
PS1=' [ $? ]
user@ubuntu: $> '
การสาธิต:
$> 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 ของฉันเป็นสองบรรทัดด้านบนจะมีและด้านล่าง[ exitcode ]
$> <blank space>'
นั่นคือเหตุผลที่มี>
มาก่อน$> '
ในบรรทัดที่สอง (ชั้นนำ>
เป็นPS2
พรอมต์คำสั่งหลาย) อีกวิธีหนึ่งคุณสามารถทำสิ่งนี้ (สังเกต$'...'
โครงสร้าง):
$> PS1=$'[ $? ] \n$> '
[ 0 ]
$>
PS1
เป็นเพียงข้อความที่ถูกพิมพ์ก่อนการป้อนข้อมูลผู้ใช้ - ไม่มีอะไรมากไปกว่านั้น มันไม่ได้มีภูมิคุ้มกันต่อการขยายตัวพารามิเตอร์และคำสั่งการแทนเพื่อให้คุณสามารถใส่อะไรเข้าไปใน$(...)
ตัวอย่างเช่น$( pwd )
และมันจะแสดงที่นั่น ฉันเคยใช้สคริปต์ที่กำหนดเองเพื่อแสดงพลังงานแบตเตอรี่แล็ปท็อปเช่น
วิธีการที่ผมหยิบมาจากซุ้มประตูวิกิพีเดียtrap
ERR
คือการ trap
ใช้ใน Bash เพื่อรันคำสั่งเมื่อได้รับสัญญาณหรือสำหรับเหตุการณ์อื่น ๆ ERR
ดักวิ่งเมื่อสิ้นสุดบรรทัดคำสั่งในปัจจุบันมีข้อผิดพลาด - ค่าตอบแทนไม่ได้เป็น 0. (ถ้ามันไม่ยุติตามปกติค่าส่งกลับเห็นได้ชัดจะเป็น 0)
ตัวอย่างเช่น:
trap 'printf "\ncode %d\n\n" $?' ERR
แล้ว:
$ echo foo
foo
$ false
code 1
$
(หมายเหตุ: ไม่มีข้อความหลังจากecho
คำสั่งที่รันเสร็จ - หมายความว่าเมื่อฉันพิมพ์คำสั่งและเทอร์มินัลไม่ทำอะไรเลย )
เคล็ดลับ Arch Wiki ดำเนินต่อไปและทำให้ข้อความเป็นสีเพื่อให้คุณได้รับข้อความสีเหลืองที่เห็นได้ชัดเจน:
EC() { echo -e '\e[1;33m'code $?'\e[m\n'; }
trap EC ERR
ผลกระทบ:
ผลที่ได้คือสิ่งที่ฉันต้องทำคือจับตาดูสีเหลืองcode
ในเอาท์พุทเพื่อรู้ว่าคำสั่งล้มเหลว