โดยปกติเราจะต้องผ่านการโต้แย้งเพียงครั้งเดียวเท่านั้น:
echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
มีวิธีการผ่านสองข้อโต้แย้งหรือไม่? สิ่งที่ต้องการ
{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
ฉันสามารถเก็บผลลัพธ์ทั้งสองไว้ในไฟล์ก่อนได้
echo abc > file1
echo xyz > file2
cat file1 file2
แต่ฉันอาจเขียนทับไฟล์โดยไม่ตั้งใจซึ่งไม่เป็นไร นี่จะเป็นสคริปต์แบบไม่โต้ตอบ โดยพื้นฐานแล้วฉันต้องการวิธีส่งผลลัพธ์ของคำสั่งสองคำสั่งไปยังcat
โดยไม่ต้องเขียนลงไฟล์
อัปเดต: ขออภัยตัวอย่างนี้ปิดบังปัญหา ในขณะที่{ echo abc ; echo xyz ; } | cat
ดูเหมือนจะทำงานออกเป็นเนื่องจากการecho
s cat
ไม่
ตัวอย่างที่ดีกว่าคือ{ cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,
สิ่งใดที่ใช้ไม่ได้ตามที่คาดไว้
กับ
file1:
a,b
c,d
file2:
1,2
3,4
ผลลัพธ์ที่คาดหวังคือ:
b,1
d,3
มีมติ:
ใช้การทดแทนกระบวนการ :cat <(command1) <(command2)
อีกทางเลือกหนึ่งให้สร้างชื่อ pipes โดยใช้mkfifo
:
mkfifo temp1
mkfifo temp2
command1 > temp1 &
command2 > temp2 &
cat temp1 temp2
สง่างามน้อยลงและ verbose มากขึ้น แต่ใช้งานได้ดีตราบใดที่คุณแน่ใจว่า temp1 และ temp2 ไม่มีอยู่ก่อนมือ