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

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

3
ท่อพบใน grep -v
ฉันพยายามค้นหาไฟล์ทั้งหมดที่เป็นประเภทที่แน่นอนและไม่มีสตริงที่แน่นอน ฉันพยายามที่จะไปเกี่ยวกับมันโดยท่อค้นหาเพื่อ grep -v ตัวอย่าง: find -type f -name '*.java' | xargs grep -v "something something" ดูเหมือนจะใช้งานไม่ได้ ดูเหมือนว่าจะส่งคืนไฟล์ทั้งหมดที่พบคำสั่ง สิ่งที่ฉันพยายามจะทำคือค้นหาไฟล์. java ทั้งหมดที่ตรงกับชื่อไฟล์ที่แน่นอน (เช่นลงท้ายด้วย 'Pb' ใน SessionPb.java) และไม่มี 'ขยาย SomethingSomething "ข้างใน ความสงสัยของฉันคือการที่ฉันทำผิด ดังนั้นคำสั่งควรมีลักษณะอย่างไรแทน
18 grep  find  pipe 

5
การใช้ข้อมูลที่อ่านจากไพพ์แทนที่จะเป็นไฟล์ในตัวเลือกคำสั่ง
ตามนิยามของมนุษย์คำสั่งนี้รับอินพุตจากไฟล์ $ command -r FILENAME สมมติว่าเป็นไฟล์ที่มีรายชื่อของชื่อไฟล์เป็นมันถูกสร้างขึ้นโดยใช้FILENAMEls &gt; FILENAME ฉันจะป้อนคำสั่งด้วยผลลัพธ์lsโดยตรงได้อย่างไร ในหัวของฉันบางสิ่งเช่นนี้น่าจะเป็นไปได้: $ ls | command -r แต่ไม่เช่นนั้นผลลัพธ์ของการlsไม่ได้รับการเชื่อมต่อเป็นอาร์กิวเมนต์ เอาท์พุท: Usage: command -r FILENAME error: -r option requires an argument ฉันจะได้รับผลที่ต้องการได้อย่างไร
18 bash  pipe 

4
ทำไม grep ไม่ใช้ท่อถึงทำงานที่นี่?
ฉันมีคำสั่งดังต่อไปนี้: find / -name libGL.so.1 ซึ่งส่งคืนบรรทัดจำนวนมากด้วย "การอนุญาตที่ถูกปฏิเสธ" ฉันต้องการยกเว้นบรรทัดดังกล่าวดังนั้นฉันจึงเพิ่มสิ่งต่อไปนี้: find / -name libGL.so.1 | grep -v 'denied' แต่ผลลัพธ์คือเดียวกัน - ฉันไม่ได้กรองบรรทัดที่มีgrep -v 'denied' Permission deniedฉันลองหลายรูปแบบดูบทเรียน grep แต่ฉันไม่สามารถเข้าใจปัญหาได้ ข้อเสนอแนะใด ๆ
18 shell  grep  pipe 

3
tee + cat: ใช้เอาต์พุตหลายครั้งแล้วต่อผลลัพธ์ที่ต่อกัน
ถ้าผมเรียกคำสั่งบางอย่างเช่นechoฉันสามารถใช้ผลจากคำสั่งว่าในคำสั่งอื่น ๆ teeที่มีหลาย ตัวอย่าง: echo "Hello world!" | tee &gt;(command1) &gt;(command2) &gt;(command3) ด้วย cat ฉันสามารถรวบรวมผลลัพธ์ของคำสั่งต่าง ๆ ได้ ตัวอย่าง: cat &lt;(command1) &lt;(command2) &lt;(command3) ฉันต้องการที่จะสามารถทำทั้งสองสิ่งในเวลาเดียวกันเพื่อที่จะสามารถteeเรียกคำสั่งเหล่านั้นในผลลัพธ์ของสิ่งอื่น (ตัวอย่างเช่นที่echoฉันเขียน) แล้วรวบรวมผลลัพธ์ทั้งหมดของพวกเขาในผลลัพธ์เดียวด้วยcat. มันเป็นสิ่งสำคัญที่จะให้ผลในการสั่งซื้อที่นี้หมายถึงเส้นในการส่งออกของcommand1, command2และcommand3ไม่ควรพัน แต่ได้รับคำสั่งเป็นคำสั่งที่มี (ที่มันเกิดขึ้นกับcat) อาจจะมีตัวเลือกที่ดีกว่าcatและteeแต่ผู้ที่เป็นคนที่ฉันรู้เพื่อให้ห่างไกล ฉันต้องการหลีกเลี่ยงการใช้ไฟล์ชั่วคราวเนื่องจากขนาดของอินพุตและเอาต์พุตอาจมีขนาดใหญ่ ฉันจะทำสิ่งนี้ได้อย่างไร PD: ปัญหาอื่นคือสิ่งนี้เกิดขึ้นในลูปซึ่งทำให้การจัดการไฟล์ชั่วคราวหนักขึ้น นี่คือรหัสปัจจุบันที่ฉันมีและใช้งานได้กับ testcase เล็ก ๆ แต่มันสร้างลูปไม่สิ้นสุดเมื่ออ่านและเขียนจาก auxfile ด้วยวิธีที่ฉันไม่เข้าใจ somefunction() { if [ $1 -eq 1 ] then …
18 pipe  cat  tee  concurrency 

1
วิธียกเลิกการเชื่อมต่อ TCP ที่สร้างโดย bash เอง?
ฉันเคยexec 3&lt;&gt;/dev/tcp/192.168.0.101/6435สร้างการเชื่อมต่อ TCP กับ 192.168.0.101:6435 และฉันได้รับรวมทั้งส่งข้อความสองสามข้อความด้วยpipeคำคำสั่ง ตอนนี้ฉันต้องการยกเลิกการเชื่อมต่อ TCP แต่ด้วยss -anpetฉันสามารถเห็นว่าทุบตีตัวเองถือการเชื่อมต่อนี้โดยไม่ต้องแยกกระบวนการเด็ก ฉันพยายามส่งสัญญาณ 9 และ 15 ไปยังกระบวนการทุบตี แต่อย่างที่ทราบกันว่าทุบตีไม่สามารถฆ่าตัวตายได้ ดังนั้นฉันสามารถยุติการเชื่อมต่อ TCP ที่ฉันสร้างขึ้นได้โดยไม่ยกเลิก pts ที่ฉันกำลังใช้ (ไม่ฆ่าด้วย root หรือส่ง Ctrl + D)?

4
ช่องว่างถัดจากท่อ
ฉันเคยเห็นhistory | grep blahและhistory |grep blah; และใช้history|grep blahงานได้แม้ว่าจะไม่มีใครดูเหมือนจะใช้มัน มีความสำคัญในช่องว่างหรือไม่ (เช่นการไพพ์ไปยัง / จากคำสั่งที่แตกต่างกันต้องใช้การเว้นวรรคที่แตกต่างกัน) หรือมันเป็นกฎเกณฑ์เสมอ?
17 bash  shell  pipe 

1
ทำให้โปรแกรมอ่านเป็นครั้งแรกจากไปป์แล้วจากคีย์บอร์ด
interactiveพิจารณาโปรแกรมโต้ตอบ ฉันต้องเรียกใช้โปรแกรมนี้บ่อยครั้งและทุกครั้งที่ฉันเรียกใช้คำสั่งแรก ๆ นั้นเหมือนกัน เห็นได้ชัดว่าการพิมพ์คำสั่งเหล่านั้นซ้ำแล้วซ้ำอีกเป็นความเจ็บปวด ฉันได้เก็บคำสั่งเหล่านั้น (คั่นด้วยการขึ้นบรรทัดใหม่) cmdในแฟ้ม ตอนนี้ฉันสามารถทำได้cat cmd | interactiveเพื่อเรียกใช้คำสั่ง ปัญหาคือเมื่อcmdอ่านเสร็จแล้วจะinteractiveได้รับ EOF และออก สิ่งที่ฉันต้องการทำคือinteractiveอ่านจากไปป์ก่อน (เห็นได้ชัดว่าinteractive &lt; cmdยอมรับได้) และเมื่อได้รับ EOF ให้เริ่มอ่านจากแป้นพิมพ์แทน
17 command-line  pipe  cat  stdin 

3
เปลี่ยนเส้นทาง stdout ผ่าน ssh
ฉันต้องการวิ่ง something &gt; file บนระบบรีโมตผ่าน ssh แต่ถ้าฉันรัน ssh host something &gt; file การเปลี่ยนเส้นทางจะดำเนินการในท้องถิ่นเป็น ssh etc &gt; file ฉันได้ลองใช้กับ'หรือ''หรือddไปป์|แทน แต่ฉันไม่สามารถใช้งานได้ สิ่งนี้สามารถทำได้?

1
วิธีการคัดลอกจาก / ไปยัง 'คลิปบอร์ด' ของ tmux ด้วย shell shell?
เมื่อทำงานในสภาพแวดล้อมของเชลล์ฉันใช้งานบ่อยครั้งในการคัดลอก 'การส่งออกไพพ์กลาง' รอบ ๆ (เช่นจาก / ไปยังบรรณาธิการที่ใช้งานแล้วไปยังเชลล์อื่น ๆ เครื่องอื่น ๆ ฯลฯ ) เมื่ออยู่ในสภาพแวดล้อมที่หน้าต่างวิธีที่ง่าย (และทั่วไป) ในการแก้ปัญหานี้มักจะผ่านคลิปบอร์ดของระบบเช่น: X11: ... | xsel -i/xsel -o | ... OS X: ... | pbcopy/pbpaste | ... ฉันจะได้รับพฤติกรรมที่สะดวกในทำนองเดียวกันโดยใช้ตัวช่วยการคัดลอก / วาง tmux ได้อย่างไร?

2
ทำความเข้าใจกับคำสั่ง piped ใน Unix / Linux
ฉันมีสองโปรแกรมง่ายๆและ A จะเรียกใช้ก่อนจากนั้นรับ "stdout" ของและใช้เป็น "stdin" สมมติว่าฉันใช้ระบบปฏิบัติการ GNU / Linux และวิธีที่ง่ายที่สุดที่จะทำได้คือ:BABA ./A | ./B ถ้าฉันต้องอธิบายคำสั่งนี้ฉันจะบอกว่ามันเป็นคำสั่งที่รับอินพุต (เช่นอ่าน) จากผู้ผลิต ( A) และเขียนไปยังผู้บริโภค ( B) นั่นเป็นคำอธิบายที่ถูกต้องหรือไม่? ฉันไม่มีอะไรเลยหรือ
16 pipe  terminology 

1
วิธีรับความเร็วการไหลของท่อโดยเฉลี่ย
หากmyfileเพิ่มขึ้นเมื่อเวลาผ่านไปฉันจะได้รับจำนวนบรรทัดต่อวินาทีโดยใช้ tail -f | pv -lr &gt; /dev/null มันให้ความเร็วทันทีไม่ใช่ค่าเฉลี่ย ฉันจะรับความเร็วเฉลี่ยได้อย่างไร (เช่นอินทิกรัลของฟังก์ชั่นความเร็วv(t)ตลอดเวลาการตรวจสอบ)
16 pipe  monitoring  tail  fifo  pv 

2
ทำไมการใช้ 'ใช่' บนท่อทุบตี * ไม่ * ทำให้เกิดลูปไม่สิ้นสุด?
ตามเอกสารของมันทุบตีรอจนกว่าคำสั่งทั้งหมดในไปป์ไลน์ได้เสร็จสิ้นการทำงานก่อนที่จะดำเนินการต่อไป เชลล์รอคำสั่งทั้งหมดในไปป์ไลน์เพื่อยกเลิกก่อนที่จะส่งคืนค่า เหตุใดคำสั่งจึงyes | trueเสร็จสิ้นในทันที ไม่ควรyesวนซ้ำตลอดไปและทำให้ท่อไม่เคยกลับมาใช่ไหม และคำถามย่อย: ตามข้อมูลจำเพาะของ POSIXท่อส่งเชลล์อาจเลือกที่จะส่งคืนหลังจากคำสั่งสุดท้ายเสร็จสิ้นหรือรอจนกว่าคำสั่งทั้งหมดจะเสร็จสิ้น กระสุนทั่วไปมีพฤติกรรมแตกต่างกันในแง่นี้หรือไม่? มีกระสุนที่ไหนบ้างที่yes | trueจะวนซ้ำตลอดไป?
16 bash  shell  pipe 

5
นี่เป็นข้อบกพร่องในการทุบตีหรือไม่? `return 'ไม่ออกจากฟังก์ชั่นถ้าเรียกจากไพพ์
ฉันมีปัญหาแปลก ๆ กับทุบตีเมื่อเร็ว ๆ นี้ ในขณะที่พยายามทำให้สคริปต์ของฉันง่ายขึ้นฉันได้รับโค้ดเล็ก ๆ นี้: $ o(){ echo | while read -r; do return 0; done; echo $?;}; o 0 $ o(){ echo | while read -r; do return 1; done; echo $?;}; o 1 returnควรออกจากฟังก์ชั่นโดยไม่พิมพ์$?ใช่มั้ย ถ้าอย่างนั้นฉันจะตรวจสอบว่าฉันสามารถกลับจากท่อเพียงอย่างเดียว: $ echo | while read -r; do return 1; done …

2
การใช้ทรัพยากรโดยใช้ไพพ์และนี่สตริง
เราสามารถได้รับผลเดียวกันโดยใช้ทั้งสองต่อไปนี้ในbash, echo 'foo' | cat และ cat &lt;&lt;&lt; 'foo' คำถามของฉันคืออะไรความแตกต่างระหว่างสองสิ่งนี้เท่าที่ใช้ทรัพยากรเกี่ยวข้องและสิ่งที่ดีกว่า ความคิดของฉันคือว่าในขณะที่ใช้ท่อเราจะใช้กระบวนการพิเศษและท่อขณะที่อยู่ในที่นี่สตริงเพียงอธิบายไฟล์จะถูกนำมาใช้กับechocat
16 bash  pipe  resources 

4
วิธีการวัดขนาดของข้อมูล piped?
ฉันต้องการทำสิ่งนี้: &gt; grep pattern file.txt | size -h 16.4 MB หรือสิ่งที่เทียบเท่ากับ: &gt; grep pattern file.txt &gt; grepped.txt &gt; ls -h grepped.txt 16.4 MB &gt; rm grepped.txt (ซึ่งอาจจะค่อนข้างไม่สะดวกนัก) เป็นไปได้ไหม
16 pipe 

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