ตรวจสอบว่าการส่งออกเป็น stdout หรือ stderr


คำตอบ:


22

มีเพียงสามวิธีที่ฉันรู้ในการพิจารณาว่าโปรแกรมจะส่งออกไปยัง STDOUT และอะไรไปยัง STDERR

  1. อ่านเอกสาร หรือ

  2. ทดลองเปลี่ยนเส้นทาง†

  3. พิมพ์ STDERR เป็นสีแดง

†ตัวอย่างเช่น:

program > program.stdout 2> program.stderr

จากนั้นดูที่ไฟล์เอาต์พุตทั้งสองเพื่อดูว่าโปรแกรมเขียนไปยัง STDOUT และไฟล์ใดที่เขียนไปยัง STDERR

แทนที่จะเปลี่ยนเส้นทางคุณสามารถไปที่teeหากคุณต้องการเอาท์พุทเพื่อดำเนินการต่อไปยังหน้าจอเช่นเดียวกับในไฟล์ ดู/programming//q/692000/477035


15
ฉันมักจะใช้รูปแบบของตัวเลือกที่ 3: program | grep .พิมพ์ STDOUT เป็นสีแดง
Dennis

การพิมพ์สีแดงนั้นค่อนข้างตรงตามที่ฉันต้องการ ขอบคุณ RedGrittyBrick & Dennis
Rauffle

7

ตามคำขอที่แสดงความคิดเห็นของคุณ:

{ { command; } 2>&3 | sed 's/^/STDOUT: /'; } 3>&1 1>&2 | sed 's/^/STDERR: /'

3
ดูน่าประทับใจ แต่คุณจะคิดที่จะเพิ่มเชอร์รี่ในต้นไม้ของคุณและอธิบายว่ามันกำลังทำอะไรอยู่? ไม่ใช่ทุกคนที่อยู่ที่นี่เป็นกูรู - และสิ่งก่อสร้างของคุณค่อนข้างซับซ้อนเล็กน้อย;)
Izzy

วงเล็บสำหรับการสั่งซื้อ จริง ๆ แล้วฉันได้รับแบบฟอร์มที่แน่นอนจากฉันลืมที่ แต่จุดคือการใช้ตัวอธิบายไฟล์พิเศษ (เกิน 1 = stdoutและ 2 = stderr) เพื่อใช้เอาท์พุทของชุดชั้นในของวงเล็บและเรียกใช้stdoutผ่านหนึ่งsedคำสั่งในขณะที่stderrผ่าน ที่แตกต่างกัน
zebediah49

ว้าว. ไม่ทราบว่าจะใช้ตัวอธิบายพิเศษเหล่านั้นหรือไม่ ครั้งแรกฉันสับสนเล็กน้อย (ฉันชอบที่จะเข้าใจสิ่งที่ฉันวิ่ง - และสับสนเล็กน้อยกับเครื่องหมายปีกกา) แต่ตอนนี้มันชัดเจน - และ IMHO เหมือนที่ OP ต้องการ +1 จากฉัน :)
อิซซี่

สิ่งนี้ช่วยฉัน ฉันต้องการเพิ่มข้อมูลลงใน stderr สิ่งนี้ทำและส่งออกทุกอย่างกลับมาที่ stdout / stderr อย่างถูกต้อง { { { { echo "stdout" ; echo "stderr">&2; } 2>&3; } 3>&1 1>&2 | awk '{print "ERROR:",$0}' 1>&3; } 3>&2 2>&1; }
ไบรอัน Drewery

0

คุณสามารถเปลี่ยนเส้นทาง stderr ไปยังไฟล์และหากมีสิ่งใดปรากฏขึ้นมาจาก stderr

เช่น ls -a 2> ls-all.txt

หากมีข้อผิดพลาดไม่ว่าด้วยเหตุผลใดก็ตามที่ส่งไปยัง stderr จะถูกเปลี่ยนเส้นทางไปยังไฟล์นี้


-1

หากคุณต้องการทำสิ่งนี้เพียงครั้งเดียวให้เปลี่ยนเส้นทางไปที่อื่น

>ตัวอย่างเช่นการเปลี่ยนเส้นทางออกมาตรฐานที่มี

ls -al> ls-l.txt (เอาต์พุตใด ๆ ที่นี่ไม่ได้มาจาก stdout หากคุณเห็นสิ่งใดจะต้องเป็นเอาต์พุต stderr)

สำหรับการเปลี่ยนเส้นทาง stderr ใช้ 2>


กระบวนการสร้างกระแสเอาท์พุทคงที่บางอย่างจะ stdout บางอย่างเพื่อ stderr ฉันต้องการตรวจสอบว่าเป็นสิ่งที่เป็นผลลัพธ์นี้จะไปที่หน้าจอ
Rauffle
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.