ฉันสงสัยว่ามีวิธีใช้คำสั่งhistory หรือไม่แต่แสดงรายการคำสั่งที่รันได้สำเร็จเท่านั้น ในทำนองเดียวกันจะมีวิธีแสดงรายการข้อผิดพลาดที่เกิดขึ้นหรือไม่?
ฉันรู้ว่าแต่ละคำสั่งมีสถานะการออกเป็น:
0
- การดำเนินการคำสั่งสำเร็จ
1
- คำสั่งล้มเหลวเนื่องจากข้อผิดพลาดระหว่างการขยายหรือเปลี่ยนเส้นทางสถานะการออกมากกว่าศูนย์
2
- การใช้คำสั่งไม่ถูกต้อง
12
- พบคำสั่ง แต่ไม่สามารถใช้งานได้
127
- ไม่พบคำสั่ง
และสามารถตรวจสอบการดำเนินการคำสั่งด้วยecho $?
จาก: http://www.linuxnix.com/2011/03/find-exit-status-script-command-linux.html
ตัวอย่าง:
หลังจากรันคำสั่ง 4 เหล่านี้:
ls
help
lss
ls nonexistentfile
ฉันพยายามทดสอบเพื่อพิมพ์คำสั่งที่ประสบความสำเร็จเท่านั้น (สถานะออกจาก 0) ซึ่งควรเป็น 'ls' และ 'ช่วย' เท่านั้น:
for j in `history | tail -5 | head -4 | cut -d ' ' -f5-`; do $j > cmd_out; if [[ `echo $?` != 0 ]]; then :; else echo $j | grep -v 'bash'; fi; done; rm cmd_out
ผลลัพธ์นี้:
ls
help
bash: lss: command not found
ls
bash: nonexistentfile.txt: command not found
วิธีนี้ใช้งานได้ แต่มีสองปัญหา:
- ด้วยเหตุผลบางอย่าง
grep -v 'bash'
ไม่รวมบรรทัดที่มี 'bash' แต่ถ้าฉันทำgrep 'bash'
มันจะรวมเฉพาะบรรทัดที่มี 'bash' เท่านั้นฉันไม่แน่ใจว่าทำไมสายหนึ่งถึงใช้งานได้ - มันแยกแต่ละบรรทัด / คำสั่งด้วยสตริง
ls
คำสั่งสุดท้ายควรเป็น
ls nonexistentfile
แต่มันกำลังทำงานls
และnonexistentfile
เป็นคำสั่งแยกต่างหาก
ความคิดเกี่ยวกับสิ่งที่ฉันควรปรับในคำสั่งหรือวิธีการเกี่ยวกับการทำเช่นนี้?
ls #$CODE, ll #$CODE
เอาท์พุทประวัติศาสตร์ ผมไม่แน่ใจว่าการทำงานสำหรับคุณ แต่ฉันมีการเปลี่ยนแปลงไปsed -i '\$s/\$/ \#\$CODE/' $HISTFILE'
sed -i '\$s/\$/ \#$CODE/' $HISTFILE
ฉันเอา `` ออกก่อน $ CODE