ฉันมีชุดของคำสั่ง b, c ที่ฉันกำลังผูกมัดร่วมกับ a && b && c
&&:
ฉันต้องการที่จะจับเอาท์พุทของคำสั่งทั้งหมดเพื่อ stdout และ stderr
a && b && c 2>&1 > capture_file
บันทึกเฉพาะเอาต์พุตจากคำสั่ง c
ฉันมีชุดของคำสั่ง b, c ที่ฉันกำลังผูกมัดร่วมกับ a && b && c
&&:
ฉันต้องการที่จะจับเอาท์พุทของคำสั่งทั้งหมดเพื่อ stdout และ stderr
a && b && c 2>&1 > capture_file
บันทึกเฉพาะเอาต์พุตจากคำสั่ง c
คำตอบ:
{ a && b && c; } >capture_file 2>&1
จดบันทึกลำดับการเปลี่ยนเส้นทาง: คุณต้องเปลี่ยนเส้นทาง stdout ก่อน
2>&1
หมายถึงการทำซ้ำปลายทางของ stdout (1) ถึง stderr (2) ดังนั้นจึงไม่มีประโยชน์เว้นแต่คุณจะตั้งค่าการเปลี่ยนเส้นทาง stdout ไว้ล่วงหน้า
2>capture_file >&2
(แต่อย่าเพราะนั่นไม่ใช่สำนวน) สิ่งสำคัญคือคุณเปลี่ยนเส้นทางไฟล์หนึ่งไปยังไฟล์ก่อนที่จะทำการสตรีมนั้นซ้ำไปที่อื่น
นอกเหนือจากการใช้การจัดกลุ่มคำสั่ง{}
คุณยังสามารถเรียกใช้คำสั่งใน subshell และจับเอาท์พุท (และ / หรือข้อผิดพลาด) ในครั้งเดียว:
( a && b && c ) >file.txt 2>&1
ตัวอย่าง:
$ ( echo foo && echo bar && echo baz && echos foo ) >check 2>&1
$ cat check
foo
bar
baz
No command 'echos' found, did you mean:
Command 'echo' from package 'coreutils' (main)
echos: command not found