คำถามติดแท็ก pipe

ไปป์ Unix เชื่อมต่อตัวอธิบายไฟล์ของสองกระบวนการ ไปป์ถูกสร้างขึ้นด้วยฟังก์ชัน POSIX pipe () ที่ประกาศใน <unistd.h> เชลล์จัดเตรียมการสร้างไพพ์ระหว่างกระบวนการโดยใช้ "|"

13
ปิดการบัฟเฟอร์ในท่อ
ฉันมีสคริปต์ที่เรียกสองคำสั่ง: long_running_command | print_progress long_running_commandพิมพ์ความคืบหน้า แต่ฉันไม่มีความสุขกับมัน ฉันใช้print_progressเพื่อทำให้ดีขึ้น (กล่าวคือฉันพิมพ์ความคืบหน้าในบรรทัดเดียว) ปัญหา: การเชื่อมต่อไปยัง stdout ยังเปิดใช้งานบัฟเฟอร์ 4K เพื่อโปรแกรมการพิมพ์ที่ดีไม่ได้รับอะไรเลย ... ไม่มีอะไร ... ไม่มีอะไร ... ทั้งนั้น ... :) ฉันจะปิดการใช้งานบัฟเฟอร์ 4K สำหรับlong_running_command(ไม่ฉันไม่มีแหล่งที่มา)
395 shell  pipe  buffer 

16
รับสถานะทางออกของกระบวนการที่ถูกส่งไปยังกระบวนการอื่น
ฉันมีสองกระบวนการfooและbarเชื่อมต่อกับท่อ: $ foo | bar barออกจาก 0 เสมอ fooฉันสนใจในรหัสทางออกของ มีวิธีใดบ้างที่จะไปถึงที่นั่น?
287 shell  pipe  exit 

10
ฉันจะตัดช่องว่างนำหน้าและต่อท้ายจากแต่ละบรรทัดของเอาต์พุตบางรายการได้อย่างไร
ฉันต้องการลบช่องว่างและแท็บนำหน้าและส่วนท้ายทั้งหมดออกจากแต่ละบรรทัดในเอาต์พุต มีเครื่องมือง่ายๆอย่างที่trimฉันสามารถเอาท์พุทของฉันเป็น? ไฟล์ตัวอย่าง: test space at back test space at front TAB at end TAB at front sequence of some space in the middle some empty lines with differing TABS and spaces: test space at both ends

1
Bash:“> |” ทำอะไร
ฉันเพิ่งเห็นสิ่งนี้ถูกเขียนลงไป; $ some-command &gt;| /tmp/output.txt ไปป์แนวตั้งถูกใช้ในการเปลี่ยนเส้นทางมาตรฐาน "piping" เอาต์พุตของคำสั่งหนึ่งไปยังอีกคำสั่ง&gt;|ในความเป็นจริงแล้วมันไร้ประโยชน์อย่างสมบูรณ์เพราะมันจะเหมือนกับ&gt;ในสถานการณ์นี้ใช่ไหม?

6
บัฟเฟอร์ของท่อใหญ่แค่ไหน
ในขณะที่ความคิดเห็นในฉันสับสนว่าทำไม "| จริง" ใน makefile มีผลเช่นเดียวกับผู้ใช้"|| จริง"ผู้ใช้cjmเขียน: อีกเหตุผลที่ควรหลีกเลี่ยง | true คือถ้าคำสั่งสร้างเอาต์พุตเพียงพอเพื่อเติมบัฟเฟอร์ของไพพ์มันจะบล็อกการรอให้ true อ่าน เรามีวิธีในการค้นหาขนาดของบัฟเฟอร์ของท่อหรือไม่?
146 pipe  buffer 

7
ส่งผ่านเอาต์พุตของคำสั่งก่อนหน้าไปยังอาร์กิวเมนต์
ฉันคำสั่งที่ส่งออกข้อมูลไปยัง stdout ( command1 -p=aaa -v=bbb -i=4) บรรทัดเอาต์พุตสามารถมีค่าต่อไปนี้: rate (10%) - name: value - 10Kbps ฉันต้องการ grep ผลลัพธ์นั้นเพื่อเก็บ 'rate' (ฉันเดาว่า pipe จะมีประโยชน์ที่นี่) และสุดท้ายฉันต้องการให้อัตรานั้นเป็นค่าของพารามิเตอร์ในคำสั่งที่สอง (สมมุติว่าcommand2 -t=${rate}) ดูเหมือนว่าจะเป็นเรื่องยุ่งยากในด้านของฉัน ฉันต้องการทราบวิธีการใช้ท่อ, grep, sed และอื่น ๆ ที่ดีกว่า ฉันได้ลองชุดค่าผสมจำนวนมากเช่นนั้นมาแล้ว แต่ฉันรู้สึกสับสนกับสิ่งเหล่านี้: $ command1 -p=aaa -v=bbb -i=4 | grep "rate" 2&gt;&amp;1 command2 -t="rate was "${rate}

4
อะไรคือความแตกต่างระหว่าง“ ไฟล์ cat | ./binary” และ“ ./binary <file”
ฉันมีไบนารี่ (ที่ฉันแก้ไขไม่ได้) และฉันสามารถทำได้: ./binary &lt; file ฉันยังสามารถทำได้: ./binary &lt;&lt; EOF &gt; "line 1 of file" &gt; "line 2 of file" ... &gt; "last line of file" &gt; EOF แต่ cat file | ./binary ทำให้ฉันมีข้อผิดพลาด ฉันไม่รู้ว่าทำไมมันไม่ทำงานกับไปป์ ในทั้ง 3 กรณีเนื้อหาของไฟล์ถูกกำหนดให้กับอินพุตมาตรฐานของไบนารี (ในวิธีที่ต่างกัน): bash อ่านไฟล์และมอบ stdin ของไบนารี่ bash อ่านบรรทัดจาก stdin (จนกระทั่ง EOF) และมอบให้ stdin …


3
ไฟล์หลอกสำหรับข้อมูลชั่วคราว
ฉันมักจะต้องการดึงข้อมูลสตริงที่ค่อนข้างสั้น (อาจมีหลายบรรทัด) ไปยังโปรแกรม commandline ซึ่งยอมรับเฉพาะอินพุตจากไฟล์ (เช่น wdiff) ในรูปแบบซ้ำ ๆ แน่ใจว่าฉันสามารถสร้างไฟล์ชั่วคราวอย่างน้อยหนึ่งไฟล์บันทึกสตริงที่นั่นและรันคำสั่งด้วยชื่อไฟล์เป็นพารามิเตอร์ แต่ดูเหมือนว่าฉันว่าขั้นตอนนี้จะไม่มีประสิทธิภาพสูงถ้าข้อมูลถูกเขียนลงดิสก์จริงและอาจเป็นอันตรายต่อดิสก์ได้มากกว่าที่จำเป็นถ้าฉันทำซ้ำขั้นตอนนี้หลายครั้งเช่นถ้าฉันต้องการป้อนข้อความบรรทัดเดียวแบบยาว ไฟล์เพื่อ wdiff มีวิธีแนะนำให้หลีกเลี่ยงสิ่งนี้โดยใช้ไฟล์หลอกเช่นไพพ์เพื่อเก็บข้อมูลชั่วคราวโดยไม่ต้องเขียนลงดิสก์ (หรือเขียนเฉพาะในกรณีที่เกินความยาววิกฤติ) โปรดทราบว่า wdiff รับสองอาร์กิวเมนต์และwdiff &lt;"text".
98 bash  files  pipe 

4
คำสั่ง piped ทำงานในลำดับใด
ฉันไม่เคยคิดเลยจริงๆว่าเชลล์รันคำสั่ง piped อย่างไร ฉันได้รับแจ้งเสมอว่า "stdout ของโปรแกรมหนึ่งถูกส่งไปยัง stdin ของโปรแกรมอื่น" เป็นวิธีคิดเกี่ยวกับท่อ ดังนั้นโดยธรรมชาติฉันคิดว่าในกรณีที่พูดว่า A | B, A จะทำงานก่อนจากนั้น B รับ stdout ของ A และใช้ stdout ของ A เป็นอินพุต แต่ฉันสังเกตเห็นว่าเมื่อผู้คนค้นหากระบวนการเฉพาะใน ps พวกเขาต้องการรวม grep -v "grep" ที่ท้ายคำสั่งเพื่อให้แน่ใจว่า grep ไม่ปรากฏในผลลัพธ์สุดท้าย ซึ่งหมายความว่าในคำสั่ง ps aux | grep "bash" | grep -v "grep" ซึ่งหมายความว่า ps รู้ว่า grep กำลังทำงานอยู่ดังนั้นจึงอยู่ในเอาต์พุตของ ps …
89 pipe  ps 

5
กระบวนการทดแทนและท่อ
ฉันสงสัยว่าจะเข้าใจสิ่งต่อไปนี้อย่างไร: การวาง stdout ของคำสั่งลงใน stdin ของอีกอันเป็นเทคนิคที่ทรงพลัง แต่ถ้าคุณต้องการไพพ์ stdout ของหลายคำสั่งล่ะ? นี่คือที่มาทดแทนกระบวนการ กล่าวอีกนัยหนึ่งกระบวนการทดแทนสามารถทำสิ่งที่ท่อสามารถทำได้หรือไม่ กระบวนการทดแทนสามารถทำอะไรได้บ้าง แต่ไปป์ไม่ได้

4
ไปป์ที่แตกต่างไม่ได้หรือ
ฉันต้องการที่จะฉลาดและเปรียบเทียบไฟล์ระยะไกลกับไฟล์ในเครื่องโดยไม่ต้องทำการดาวน์โหลดด้วยตนเองก่อน ฉันสามารถรับเนื้อหาของไฟล์ระยะไกลได้ ssh user@remote-host "cat path/file.name" อย่างไรก็ตามท่อที่ไป diff ssh user@remote-host "cat path/file.name" | diff path/file.name ให้ฉันนี้: diff: missing operand after `path/file.nae' diff: Try `diff --help' for more information. ฉันได้ตั้งค่าคีย์ ssh แล้วดังนั้นจึงไม่ได้แจ้งรหัสผ่านให้ฉัน วิธีแก้ปัญหาสำหรับสิ่งนี้คืออะไร?

6
ฉันสามารถไปป์ stdout บนเซิร์ฟเวอร์หนึ่งเพื่อ stdin บนเซิร์ฟเวอร์อื่นได้หรือไม่
stdoutบนเซิร์ฟเวอร์ CentOS หนึ่งเซิร์ฟเวอร์ต้องถูกไพพ์ไปstdinยังเซิร์ฟเวอร์ CentOS อื่น เป็นไปได้ไหม ปรับปรุง ScottPack, MikeyB และ jofel ล้วนมีคำตอบที่ถูกต้อง ฉันได้รับคำตอบให้กับสกอตต์เพราะแม้ว่าคำถามของฉันไม่ได้ระบุความปลอดภัยเป็นข้อกำหนด แต่ก็ดีที่จะปลอดภัย อย่างไรก็ตามคำแนะนำของเพื่อนอีกสองคนนั้นก็ใช้ได้เช่นกัน
74 pipe  stdout  stdin 

7
โปรแกรมที่ส่ง STDIN ไปยัง STDOUT ด้วยรหัสสีถูกตัดออกหรือไม่
ฉันมีคำสั่งที่ให้ผลลัพธ์เป็นสีและฉันอยากจะแปะมันลงในไฟล์ที่มีรหัสสีหลุดออกมา มีคำสั่งที่ทำงานเหมือนcatยกเว้นว่าจะตัดรหัสสีหรือไม่? ฉันวางแผนที่จะทำสิ่งนี้: $ command-that-produces-colored-output | stripcolorcodes &gt; outfile
64 colors  pipe  filter 

8
จะทำไพพ์สองทิศทางระหว่างสองโปรแกรมได้อย่างไร
ทุกคนรู้วิธีที่จะทำให้ท่อทิศทางเดียวระหว่างสองโปรแกรม (ผูกstdoutหนึ่งครั้งแรกและครั้งที่สองอย่างใดอย่างหนึ่ง):stdinfirst | second แต่จะทำไพพ์สองทิศทางคือ cross-bind stdinและstdoutสองโปรแกรมได้อย่างไร มีวิธีง่าย ๆ ในการทำเชลล์หรือไม่?
63 shell  pipe 

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