ในการดีบักสคริปต์ทุบตี คุณมีหลายตัวเลือก และบางตัวเลือกมีประสิทธิภาพมากกว่าการเปลี่ยนเส้นทาง stdout/stderr
คุณสามารถเพิ่มของคุณ ~/.bash_profile
(สร้างการติดตามเฉพาะส่วนเฉพาะของสคริปต์ของคุณ) ด้วย
set -x # เปิดใช้งานการดีบักจากที่นี่
<คำสั่ง>
ตั้งค่า +x # หยุดการดีบักจากที่นี่
อีกด้วย, ชุด -v
พิมพ์บรรทัดอินพุตของเชลล์ขณะที่อ่าน และ ชุด +v
ปิดใช้งานสิ่งนี้
ด้วยสิ่งนี้เพียงอย่างเดียว คุณอาจจะจับปัญหาได้
การติดตามการเปลี่ยนเส้นทาง
ใช้ ทุบตีตัวแปร BASH_XTRACEFD
หากตั้งค่าเป็นจำนวนเต็มตามตัวอธิบายไฟล์ที่ถูกต้อง Bash จะเขียนเอาต์พุตการติดตามที่สร้างขึ้นเมื่อเปิดใช้งาน âset -xâ ให้กับตัวอธิบายไฟล์นั้น ซึ่งช่วยให้เอาต์พุตการติดตามแยกออกจากข้อความวินิจฉัยและข้อความแสดงข้อผิดพลาดได้ ตัวอธิบายไฟล์ถูกปิดเมื่อ BASH_XTRACEFD ไม่ได้ตั้งค่าหรือกำหนดค่าใหม่ การยกเลิกการตั้งค่า BASH_XTRACEFD หรือการกำหนดสตริงว่างทำให้เอาต์พุตการติดตามถูกส่งไปยังข้อผิดพลาดมาตรฐาน โปรดทราบว่าการตั้งค่า BASH_XTRACEFD เป็น 2 (ตัวอธิบายไฟล์ข้อผิดพลาดมาตรฐาน) จากนั้นยกเลิกการตั้งค่าจะส่งผลให้ข้อผิดพลาดมาตรฐานถูกปิด
ดังนั้นคุณจะใช้
ผู้บริหาร 5> ~/bash_profile_ouput.txt
BASH_XTRACEFD="5"
<คำสั่ง>
ยกเลิกการตั้งค่า BASH_XTRACEFD
พิมพ์เลขบรรทัด
ใช้ ทุบตีตัวแปร ไลน์โน
(และ BASH_LINENO
, BASH_SOURCE
และ/หรือ FUNCNAME
ในกรณีที่ซับซ้อนกว่านี้)
echo "กำลังดำเนินการ ${LINENO}"
<คำสั่ง>
เปลี่ยนเส้นทาง stdout/stderr
รวมกัน สั่งการ ผู้บริหาร
ด้วยการเปลี่ยนเส้นทาง และอาจเป็นไปได้ ที
.
ดูคำตอบ ที่นี่ซึ่งรวมถึงวิธีการ/"กลเม็ด" อื่นนอกเหนือจากการใช้ ผู้บริหาร
.
ที่เกี่ยวข้อง:
- https://stackoverflow.com/questions/44249890/pipe-bash-stdout-only-in-debug-mode
- https://unix.stackexchange.com/questions/334382/find-out-what-scripts-are- being-run-by-bash-on-startup
- https://unix.stackexchange.com/questions/155551/how-to-debug-a-bash-script