ถ้าฉันป้อนตัวเลือกbash -xมันจะแสดงทุกบรรทัด แต่สคริปต์จะดำเนินการตามปกติ
ฉันจะดำเนินการทีละบรรทัดได้อย่างไร? กว่าฉันจะเห็นว่ามันทำถูกต้องหรือฉันยกเลิกและแก้ไข ใส่เอฟเฟกต์เดียวกันread
ในทุกบรรทัด
ถ้าฉันป้อนตัวเลือกbash -xมันจะแสดงทุกบรรทัด แต่สคริปต์จะดำเนินการตามปกติ
ฉันจะดำเนินการทีละบรรทัดได้อย่างไร? กว่าฉันจะเห็นว่ามันทำถูกต้องหรือฉันยกเลิกและแก้ไข ใส่เอฟเฟกต์เดียวกันread
ในทุกบรรทัด
คำตอบ:
คุณไม่จำเป็นต้องอ่านทุกบรรทัดเพียงแค่เพิ่มกับดักดังต่อไปนี้ลงในสคริปต์ทุบตีของคุณมันมีผลตามที่คุณต้องการเช่น
#!/usr/bin/env bash
set -x
trap read debug
< YOUR CODE HERE >
ใช้งานได้เพียงทดสอบด้วย bash v4.2.8 และ v3.2.25
รุ่นปรับปรุง
หากสคริปต์ของคุณกำลังอ่านเนื้อหาจากไฟล์รายการข้างต้นจะไม่ทำงาน วิธีแก้ปัญหาอาจมีลักษณะดังตัวอย่างต่อไปนี้
#!/usr/bin/env bash
echo "Press CTRL+C to proceed."
trap "pkill -f 'sleep 1h'" INT
trap "set +x ; sleep 1h ; set -x" DEBUG
< YOUR CODE HERE >
หากต้องการหยุดสคริปต์คุณจะต้องฆ่ามันจากเชลล์อื่นในกรณีนี้
ทางเลือก 1
หากคุณต้องการรอสักครู่ก่อนดำเนินการคำสั่งถัดไปในสคริปต์ของคุณตัวอย่างต่อไปนี้อาจเหมาะกับคุณ
#!/usr/bin/env bash
trap "set +x; sleep 5; set -x" DEBUG
< YOUR CODE HERE >
ฉันกำลังเพิ่ม set + x และ set -x ภายในคำสั่ง trap เพื่อให้เอาต์พุตอ่านได้ง่ายขึ้น
trap 'read -u1' debug
เพื่อลบล้างปัญหาการเปลี่ยนเส้นทางการอ่านไฟล์
บางทีBASH Debuggerอาจเป็นสิ่งที่เหมาะสำหรับคุณ
apt-get install bashdb
ได้ จากนั้นคุณก็ต้องวิ่งbashdb your_command.sh
พิมพ์step
แล้วกดกลับรถหลังจากนั้น
brew install bashdb
หากสคริปต์ทุบตีของคุณเป็นคำสั่งปิดหนึ่งคำที่คุณต้องการเรียกใช้ทีละรายการคุณสามารถทำสิ่งนี้ได้ซึ่งจะรันคำสั่งทีละคำสั่งเมื่อคุณเพิ่มตัวแปรLN
ตามหมายเลขบรรทัดที่คุณต้องการเรียกใช้ . สิ่งนี้ช่วยให้คุณสามารถเรียกใช้คำสั่งสุดท้ายอีกครั้งอย่างง่ายสุด ๆ จากนั้นคุณเพียงแค่เพิ่มตัวแปรเพื่อไปที่คำสั่งถัดไป
สมมติว่าคำสั่งของคุณอยู่ในไฟล์ "it.sh" ให้เรียกใช้คำสั่งต่อไปนี้ทีละรายการ
$ cat it.sh
echo "hi there"
date
ls -la /etc/passwd
$ $(LN=1 && cat it.sh | head -n$LN | tail -n1)
"hi there"
$ $(LN=2 && cat it.sh | head -n$LN | tail -n1)
Wed Feb 28 10:58:52 AST 2018
$ $(LN=3 && cat it.sh | head -n$LN | tail -n1)
-rw-r--r-- 1 root wheel 6774 Oct 2 21:29 /etc/passwd
มีลักษณะที่ทุบตีก้าว xtrace
อนุญาตให้ก้าว xtrace
xargs:สามารถกรองเส้น
cat .bashrc | xargs -0 -l -d \\n bash