การเปลี่ยนเส้นทาง stdout จากสองโปรแกรม


9

ฉันใช้เครื่องมือตรวจสอบหน่วยความจำ (prog1) ในรหัส C ++ (prog2) ซึ่งทั้งคู่ให้ผลลัพธ์ที่ยอดเยี่ยมและมีรายละเอียดมาก เพื่อที่จะไล่ล่าบั๊กบางตัวฉันต้องบันทึกผลลัพธ์นี้ไปยังไฟล์

ฉันพยายามเปลี่ยนเส้นทาง stdout เป็นไฟล์:

prog1 prog2 > outfile.txt

แต่นั่นให้ไฟล์ที่มีเอาต์พุตของ prog2 ในขณะที่เอาต์พุตของ prog1 ยังคงไปที่เทอร์มินัล

ใครรู้วิธีระบุว่าฉันต้องการให้ทั้งสองผลลัพธ์ไปที่ไฟล์หรือไม่ ชอบ(prog1 prog2) > outfile.txtไหม

คำตอบ:


19

มีโอกาสที่ดีที่prog1กำลังเขียนเอาต์พุตไปยังข้อผิดพลาดมาตรฐาน คุณสามารถเปลี่ยนเส้นทางผลลัพธ์ทั้งสองไปเป็นไฟล์เดียวได้

prog1 prog2 > outfile.txt 2>&1

หรือคุณสามารถแยกเอาท์พุทด้วย

prog1 prog2 > outfile.txt 2> errors.txt

สิ่งนี้ไม่ได้แยกเอาต์พุตของแต่ละโปรแกรมแต่แยกช่องสัญญาณออก ดูตัวควบคุมและการเปลี่ยนเส้นทางของเชลล์คืออะไร สำหรับรายละเอียด

หากคุณดูprog1เอกสารของคุณอาจพบตัวเลือกในการบอกให้เก็บเอาท์พุทในไฟล์ที่มีชื่อแทน ตัวอย่างเช่นกับstrace,

strace -o strace.txt prog2 > outfile.txt

จะเก็บstraceเอาท์พุทของstrace.txtและทุกสิ่งที่เขียนไปยังเอาท์พุทมาตรฐานoutfile.txtมา


5
2>&1ได้ไปหลังจาก > outfile.txtลำดับการเปลี่ยนเส้นทางสำคัญ
Barmar

หมายเหตุถึงผู้อ่านในอนาคต: @Barmar นั้นถูกต้องอย่างแน่นอนว่าลำดับความสำคัญของการเปลี่ยนเส้นทางมีความสำคัญซึ่งกันและกัน สำหรับผู้ที่ไม่คุ้นเคยลำดับของการเปลี่ยนเส้นทางที่เกี่ยวข้องกับข้อโต้แย้งของโปรแกรมจะมีเฉพาะในบางกรณีเท่านั้น จุดเริ่มต้นและจุดสิ้นสุดเป็นสถานที่ทั่วไป แต่บางครั้งก็เกิดขึ้นกลาง (เช่นโปรดอย่าทำเช่นนี้) เทียบเท่ากับecho >&2 hello world echo hello world >&2ข้อมูลเพิ่มเติมที่นี่: tldp.org/LDP/abs/html/io-redirection.html
Morgen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.