เอาต์พุตจาก -x ไปที่ stderr ไม่ใช่ stdout แต่แม้จะมีปัญหา - สคริปต์จำนวนมากจะมีการพึ่งพาการทำงานกับเนื้อหาของ stderr และความยุ่งเหยิงของมันที่จะมีการดีบักและ stderr สตรีมผสมกันในบางกรณี
เวอร์ชันของ Bash> 4.1 มีวิธีแก้ไขปัญหาที่แตกต่างกัน: ตัวแปรสภาพแวดล้อม BASH_XTRACEFD ช่วยให้คุณระบุ file descriptor ซึ่งจะใช้ในการส่งสตรีมดีบั๊กไป นี่อาจเป็นไฟล์หรือไพพ์หรือความดีอื่น ๆ ที่คุณต้องการ
# Use FD 19 to capture the debug stream caused by "set -x":
exec 19>/tmp/my-script.log
# Tell bash about it (there's nothing special about 19, its arbitrary)
export BASH_XTRACEFD=19
# turn on the debug stream:
set -x
# run some commands:
cd /etc
find
echo "Well, that was fun."
# Close the output:
set +x
exec 19>&-
# See what we got:
cat /tmp/my-script.log
ด้วยการเล่นซออีกเล็กน้อยคุณสามารถทำสิ่งอื่น ๆ - เช่นทำ 'ที' บน stdout และ / หรือ stdin สตรีมและสอดแทรกสิ่งเหล่านั้นด้วยเอาต์พุต debug ดังนั้นบันทึกของคุณจึงสมบูรณ์มากขึ้น สำหรับรายละเอียดเพิ่มเติมเกี่ยวกับเรื่องนี้ดู/programming/3173131/redirect-copy-of-stdout-to-log-file-from-within-bash-script-itself
ข้อได้เปรียบที่ยิ่งใหญ่ของวิธีนี้มากกว่าทางเลือกอื่นคือคุณไม่ต้องเสี่ยงกับการเปลี่ยนแปลงพฤติกรรมของสคริปต์ของคุณ