ฉันมีเชลล์สคริปต์set -xที่มีเอาต์พุต verbose / debug:
#!/bin/bash
set -x
command1
command2
...
ผลลัพธ์มีลักษณะดังนี้:
+ command1
whatever output from command1
+ command2
whatever output from command2
ปัญหาของฉันคือ, เอาท์พุทเชลล์ (ที่เกิดจากset -x) ไป stderr ที่ผสมกับผลของคำสั่งที่ ( command1, command2, ... ) ฉันยินดีที่จะมีเอาต์พุต "ปกติ" บนหน้าจอ (เช่นสคริปต์ทำงานโดยไม่มีset -x) และเอาต์พุต "พิเศษ" ของ bash แยกกันในไฟล์
ดังนั้นฉันอยากได้สิ่งนี้บนหน้าจอ:
whatever output from command1
whatever output from command2
และสิ่งนี้ในล็อกไฟล์:
+ command1
+ command2
(เช่นกันถ้าไฟล์บันทึกมีทุกอย่างพร้อมกัน)
set -x 2> fileชัด doens't มีผลบังคับใช้ที่เหมาะสมเพราะมันไม่ได้ผลของคำสั่งที่กำหนดไว้ แต่มันเปลี่ยนพฤติกรรมของทุบตีที่
การใช้bash 2> fileสคริปต์ทั้งหมดไม่ได้ทำสิ่งที่ถูกต้องเพราะมันเปลี่ยนเส้นทาง stderr ของทุกคำสั่งที่ทำงานในเชลล์นี้ด้วยดังนั้นฉันจึงไม่เห็นข้อความแสดงข้อผิดพลาดของคำสั่ง