การจับเอาท์พุท / การเปลี่ยนเส้นทางของคำสั่งที่ผูกมัดโดย &&


11

ฉันมีชุดของคำสั่ง b, c ที่ฉันกำลังผูกมัดร่วมกับ a && b && c&&:

ฉันต้องการที่จะจับเอาท์พุทของคำสั่งทั้งหมดเพื่อ stdout และ stderr a && b && c 2>&1 > capture_file บันทึกเฉพาะเอาต์พุตจากคำสั่ง c

คำตอบ:


11
{ a && b && c; } >capture_file 2>&1

จดบันทึกลำดับการเปลี่ยนเส้นทาง: คุณต้องเปลี่ยนเส้นทาง stdout ก่อน


ทำไม stdout ก่อน
TLOlczyk

@TLOlczyk 2>&1หมายถึงการทำซ้ำปลายทางของ stdout (1) ถึง stderr (2) ดังนั้นจึงไม่มีประโยชน์เว้นแต่คุณจะตั้งค่าการเปลี่ยนเส้นทาง stdout ไว้ล่วงหน้า
yaegashi

2
@Tlolczyk ไม่จำเป็นต้องเป็น stdout ก่อน - คุณสามารถทำ stderr ก่อน: 2>capture_file >&2(แต่อย่าเพราะนั่นไม่ใช่สำนวน) สิ่งสำคัญคือคุณเปลี่ยนเส้นทางไฟล์หนึ่งไปยังไฟล์ก่อนที่จะทำการสตรีมนั้นซ้ำไปที่อื่น
Toby Speight

1

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