ฉันจะทราบได้อย่างไรว่ากระบวนการส่งออกใดคือ stdout หรือ stderr
ฉันจะทราบได้อย่างไรว่ากระบวนการส่งออกใดคือ stdout หรือ stderr
คำตอบ:
มีเพียงสามวิธีที่ฉันรู้ในการพิจารณาว่าโปรแกรมจะส่งออกไปยัง STDOUT และอะไรไปยัง STDERR
อ่านเอกสาร หรือ
ทดลองเปลี่ยนเส้นทาง†
†ตัวอย่างเช่น:
program > program.stdout 2> program.stderr
จากนั้นดูที่ไฟล์เอาต์พุตทั้งสองเพื่อดูว่าโปรแกรมเขียนไปยัง STDOUT และไฟล์ใดที่เขียนไปยัง STDERR
แทนที่จะเปลี่ยนเส้นทางคุณสามารถไปที่tee
หากคุณต้องการเอาท์พุทเพื่อดำเนินการต่อไปยังหน้าจอเช่นเดียวกับในไฟล์ ดู/programming//q/692000/477035
ตามคำขอที่แสดงความคิดเห็นของคุณ:
{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'
stdout
และ 2 = stderr
) เพื่อใช้เอาท์พุทของชุดชั้นในของวงเล็บและเรียกใช้stdout
ผ่านหนึ่งsed
คำสั่งในขณะที่stderr
ผ่าน ที่แตกต่างกัน
{ { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
คุณสามารถเปลี่ยนเส้นทาง stderr ไปยังไฟล์และหากมีสิ่งใดปรากฏขึ้นมาจาก stderr
เช่น
ls -a 2> ls-all.txt
หากมีข้อผิดพลาดไม่ว่าด้วยเหตุผลใดก็ตามที่ส่งไปยัง stderr จะถูกเปลี่ยนเส้นทางไปยังไฟล์นี้
หากคุณต้องการทำสิ่งนี้เพียงครั้งเดียวให้เปลี่ยนเส้นทางไปที่อื่น
>
ตัวอย่างเช่นการเปลี่ยนเส้นทางออกมาตรฐานที่มี
ls -al> ls-l.txt (เอาต์พุตใด ๆ ที่นี่ไม่ได้มาจาก stdout หากคุณเห็นสิ่งใดจะต้องเป็นเอาต์พุต stderr)
สำหรับการเปลี่ยนเส้นทาง stderr ใช้ 2>
program | grep .
พิมพ์ STDOUT เป็นสีแดง