ฉันมีเชลล์สคริปต์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 ของทุกคำสั่งที่ทำงานในเชลล์นี้ด้วยดังนั้นฉันจึงไม่เห็นข้อความแสดงข้อผิดพลาดของคำสั่ง