ฉันจะรวม stdout และ stderr สำหรับกระสุนต่างๆได้อย่างไร


18

ฉันรู้คำตอบสำหรับเชลล์บางตัวเช่นcmd.exeคุณสามารถ:

some.exe > out.txt 2>&1

คุณจะประสบความสำเร็จเช่นเดียวกันสำหรับกระสุนอื่น ๆ ได้อย่างไร (bash, ksh, tcsh, powershell, ฯลฯ )

คำตอบ:


16

ปลาเปลือกหอย

หากต้องการเปลี่ยนเส้นทางทั้งเอาต์พุตมาตรฐานและข้อผิดพลาดมาตรฐานไปที่ไฟล์ all_output.txt คุณสามารถเขียน:

echo Hello > all_output.txt ^&1

3
ถ้า piping output ไปยังคำสั่งถัดไปให้ใช้ 2> | แทน: echo Hello 2> | น้อยกว่า
Jeffrey04

ไวยากรณ์ของท่ออาจมีการเปลี่ยนแปลง เปลือกปลาของฉันใช้ไวยากรณ์ "^ & 1" เดียวกันสำหรับทั้งคู่
Keith Bentrup

2>&1ยังทำงาน - เป็นหลักจดชวเลขของปลาสำหรับ^ >2โปรดทราบว่า2>| lessหรือ^| lessด้วยตัวเองไปป์stderr เท่านั้น ; เพื่อส่งทั้งความผิดพลาดของเราไปทำ^&1 | less
Beni Cherniavsky-Paskin

ชวเลขไวยากรณ์สำหรับการเปลี่ยนเส้นทาง / ท่อทั้งออกและผิดยังอยู่ภายใต้การสนทนาgithub.com/fish-shell/fish-shell/issues/110
Beni Cherniavsky-Paskin


2

ในPowershellมันเหมือนกันทุกประการ:

2> & 1 ส่งข้อผิดพลาดไปยังไม่มีกระบวนการรับ, PowerShell 2> & 1
          กระแสเอาต์พุตความสำเร็จ

(จากabout_Redirection)

ในbashและ ksh อย่างน้อยผมก็รู้ว่ามันทำงานด้วยวิธีนี้

ดูเหมือนว่าจะเป็นการประชุมร่วมกัน

วิธีที่รวดเร็วในการค้นหาเกี่ยวกับมันคือการเปิด man page ของเชลล์และทำการค้นหา&1(ด้วย/แล้วพิมพ์&1) สิ่งนี้ไม่ค่อยเกิดขึ้นในบริบทอื่น


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