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

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

5
วัดทรูพุตของท่อในเปลือก
มีคำสั่งเชลล์ที่ให้คุณวัดความเร็วของข้อมูลที่ผ่านไปดังนั้นคุณสามารถวัดความเร็วของเอาต์พุตของคำสั่งในไพพ์ได้ ดังนั้นแทนที่จะ: $ somecommand | anothercommand คุณสามารถทำสิ่งที่ชอบ: $ somecommand | ??? | anothercommand และสถิติปริมาณงาน (ไบต์ / วินาที) ถูกพิมพ์ไปยัง stderr ฉันคิดว่า แต่ฉันทำไม่ได้สำหรับชีวิตของฉันจำได้ว่าคำสั่งนั้นคืออะไร

7
ความแตกต่างระหว่าง 2> & 1> output.log และ 2> & 1 | ออกที. ล็อก
ฉันต้องการทราบความแตกต่างระหว่างสองคำสั่งต่อไปนี้ 2&gt;&amp;1 &gt; output.log และ 2&gt;&amp;1 | tee output.log ฉันเห็นเพื่อนร่วมงานคนหนึ่งของฉันใช้ตัวเลือกที่สองเพื่อเปลี่ยนเส้นทาง ฉันรู้ว่า 2&gt; &amp; 1 ทำอะไรคำถามเดียวของฉันคือวัตถุประสงค์ของการใช้ทีที่ตัวดำเนินการเปลี่ยนเส้นทางแบบง่าย "&gt;" สามารถใช้งานได้อย่างไร

4
วิธีเรียกใช้ตัวแก้ไข vim และไพพ์เอาต์พุตเพื่อ bash
บางครั้งฉันจำเป็นต้องเขียนข้อความจากนั้นส่งข้อความไปยังคำสั่งอื่น เวิร์กโฟลว์ตามปกติของฉันมีลักษณะดังนี้: vim # I edit and save my file as file.txt cat file.txt | pandoc -o file.pdf # pandoc is an example rm file.txt ฉันพบว่ามันยุ่งยากและพยายามเรียนรู้การเขียนสคริปต์ทุบตีฉันต้องการทำให้กระบวนการง่ายขึ้นมากโดยการเขียนคำสั่งที่เปิดไฟเอดิเตอร์และเมื่อเอดิเตอร์ปิดไพพ์เอาต์พุตของเอดิเตอร์เพื่อ stdout quickedit | pandoc -o file.pdfแล้วฉันจะสามารถเรียกใช้คำสั่งเป็น ฉันไม่แน่ใจว่ามันจะทำงานอย่างไร ฉันได้เขียนฟังก์ชันเพื่อทำให้สิ่งนี้เป็นไปโดยอัตโนมัติโดยทำตามขั้นตอนการทำงานที่ถูกต้องข้างต้นรวมถึงการเพิ่มเติมบางอย่าง มันสร้างสตริงแบบสุ่มเพื่อทำหน้าที่เป็นชื่อไฟล์และส่งผ่านไปยังกลุ่มเมื่อฟังก์ชันถูกเรียกใช้ เมื่อผู้ใช้ออกเป็นกลุ่มโดยการบันทึกไฟล์ฟังก์ชั่นพิมพ์ไฟล์ไปยังคอนโซลแล้วลบไฟล์ function quickedit { filename="$(cat /dev/urandom | env LC_CTYPE=C tr -cd 'a-f0-9' | head -c …
34 vim  pipe  stdout 

2
การส่งข้อมูลไปยัง stdin ของกระบวนการโดยไม่ทำให้ EOF เกิดขึ้นภายหลัง
ฉันมีไฟล์ปฏิบัติการที่เริ่มต้นเชลล์แบบโต้ตอบกับผู้ใช้ เมื่อต้องการเปิดตัวเชลล์ให้ฉีดคำสั่งสองสามคำก่อนจากนั้นอนุญาตให้ผู้ใช้มีเซสชันแบบโต้ตอบ ฉันสามารถทำได้อย่างง่ายดายโดยใช้echo: echo "command 1\ncommand 2\ncommand3" | ./shell_executable นี้เกือบจะทำงาน ปัญหาคือคำสั่ง echo ที่ป้อน stdin ของกระบวนการจะกระทบ EOF เมื่อดำเนินการตามคำสั่งของฉันแล้ว EOF นี้ทำให้เชลล์ยกเลิกทันที (ราวกับว่าคุณกด Ctrl + D ในเชลล์) มีวิธีฉีดคำสั่งเหล่านี้ลงใน stdin โดยไม่ทำให้ EOF ภายหลังได้หรือไม่

14
ตัวอย่างที่ดีของคำสั่ง piping ด้วยกันคืออะไร?
หากคุณกำลังช่วยใครบางคนเพื่อเรียนรู้แนวคิดของไพพ์บนบรรทัดคำสั่งคุณจะใช้ตัวอย่างอะไร ตัวอย่างที่เกิดขึ้นจริงมีดังนี้: cat whatever.txt | less ฉันรู้สึกว่าไม่ใช่ตัวอย่างที่ดีที่สุดนั่นก็เพราะมีเพียงขั้นตอนเดียว การใช้งานที่ดี|คืออะไร ตัวอย่างที่ฉันจะนำเสนอจะใช้โปรแกรมที่มีเอาท์พุตของตัวเองที่สามารถทำงานได้อย่างอิสระจากนั้นแสดงให้เห็นถึงการรวมเข้าด้วยกัน

6
ฉันจะไพพ์ ls เป็น grep ได้อย่างไรและลบไฟล์ที่กรองโดย grep?
ฉันต้องการลบแพคเกจบางอย่างในไฟล์บ้านของฉัน แต่ชื่อไฟล์ยาวเกินไป ( google-chrome-stable_current_i386.deb) ดังนั้นฉันจึงตัดสินใจใช้คำสั่งls|grep chrome|rmเพื่อไพพ์ไฟล์เพื่อ grep เพื่อกรองไฟล์ chrome แล้วลบออก มันใช้งานไม่ได้ดังนั้นฉันอยากจะดูว่าฉันสามารถทำสิ่งนี้ได้อย่างไร
33 grep  pipe  ls  rm 

1
สิ่งที่รับประกันสำหรับการเขียนพร้อมกันลงในท่อที่มีชื่อ?
ตัวอย่างเช่นฉันสร้างไปป์ที่มีชื่อดังต่อไปนี้: mknod myPipe p และฉันอ่านจากบางกระบวนการ (ตัวอย่างเช่นเซิร์ฟเวอร์บางตัว) สำหรับวัตถุประสงค์ตัวอย่างฉันใช้หาง: tail -f myPipe หากกระบวนการไคลเอนต์หลายแห่งเขียนข้อความลงไป (ตัวอย่างเช่นecho "msg" &gt;&gt; myPipeอาจมีโอกาสที่ข้อความจะถูกอินเตอร์ลีฟเช่นนี้: &lt;beginning of message1&gt;&lt;message2&gt;&lt;ending of message1&gt; หรือกระบวนการเขียนชื่อไพพ์คืออะตอมหรือไม่
32 linux  pipe 

4
find -exec + vs find | xargs: อันไหนให้เลือก?
ผมเข้าใจว่า-execสามารถใช้ตัวเลือกในการเลียนแบบพฤติกรรมของ+ xargsมีสถานการณ์ใดบ้างที่คุณต้องการให้ฟอร์มหนึ่งเหนืออีกฟอร์มหนึ่ง? ฉันมักจะชอบแบบฟอร์มแรกถ้าเพียงเพื่อหลีกเลี่ยงการใช้ท่อ ฉันคิดว่านักพัฒนาของfindต้องทำการเพิ่มประสิทธิภาพที่เหมาะสม ฉันถูกไหม?
32 bash  find  pipe  xargs 

3
ฉันจะ“ แมวและติดตาม” ไฟล์ได้อย่างไร
wgetไฟล์จะถูกดาวน์โหลดตามลำดับโดย หากฉันเริ่มเปิดออกด้วยcat myfile.tar.bz2 | tar -xjอาจเป็นแกะอย่างถูกต้องหรือล้มเหลวด้วย "ไม่คาดคิด EOF" ขึ้นอยู่กับสิ่งที่เร็วขึ้น วิธี "cat และ follow" ไฟล์เช่นเนื้อหาที่ส่งออกของไฟล์ไปยัง stdout แต่ไม่ออกจาก EOF ให้หม่อม subribed ไปที่ไฟล์นั้นและทำการส่งออกส่วนใหม่ของข้อมูลออกต่อเมื่อปิดไฟล์โดย ผู้เขียนและไม่เปิดใหม่ภายใน N วินาที ฉันได้สร้างสคริปต์cat_and_followตามคำตอบของ @ arielCo ซึ่งจะยุติtailเมื่อไฟล์ไม่ถูกเปิดเพื่อการเขียนอีกต่อไป
31 files  pipe  cat  tail  open-files 

9
ฉันจะลบบรรทัดแรกและบรรทัดสุดท้ายของไฟล์โดยใช้คำสั่งเชลล์ได้อย่างไร
ฉันมีไฟล์ชื่อElement_queryที่มีผลลัพธ์ของแบบสอบถาม: SQL&gt; select count (*) from element; [Output of the query which I want to keep in my file] SQL&gt; spool off; ฉันต้องการลบบรรทัดที่ 1 และบรรทัดสุดท้ายโดยใช้คำสั่งเชลล์
31 shell  sed  awk  grep  pipe 

3
ฉันจะโยง pgrep กับ kill ได้ไหม
ฉันสังเกตเห็นว่า|ใช้เพื่อส่งผลลัพธ์ของคำสั่งแรกไปยังอีก ฉันต้องการฆ่ากระบวนการทั้งหมดที่ตรงกับชื่อ นี่คือสิ่งที่ pgrep ทำตามปกติ: $ pgrep name 5089 5105 และข้อโต้แย้งหลายประการดูเหมือนจะทำงานกับkill: sudo kill 5089 5105 แต่นี่เป็นสิ่งที่ผิด: pgrep name | kill ดังนั้นจะทำอย่างไรให้ถูกต้อง?
31 shell  pipe  arguments 

3
Grep หลากสี
ฉันพยายามเรียกคำสั่ง grep แต่ละคำเพื่อเน้นว่าผลลัพธ์เป็นสีที่ต่างกัน ฉันสามารถทำได้ด้วยตนเองโดยใช้บรรทัดดังนี้: ls -l GREP_COLORS='mt=01;32' grep c | GREP_COLORS='mt=01;31' grep o | GREP_COLORS='mt=01;34' grep n | GREP_COLORS='mt=01;36' grep f cตัวละครทุกตัวจะถูกเน้นด้วยสีเขียวและoตัวละครทุกตัวจะถูกเน้นด้วยสีแดง ฯลฯ ... เพื่อให้ตัวอย่างนี้ทำงานคุณจะต้องแน่ใจว่าคุณมี --color=alwaysคำสั่ง grep อยู่เสมอ ฉันได้ตั้งค่านี้ใน.bashrc grep ของฉันดังนั้นจะมีสี: export GREP_OPTIONS='--color=always' สิ่งที่ฉันพยายามทำให้สำเร็จคือห่อฟังก์ชันนี้ด้วยนามแฝงเพื่อให้ฉันสามารถโทรได้ grepและมีGREP_COLORSค่าที่แตกต่างกันในแต่ละครั้ง ฉันเข้าใจการพิจารณาของเชลล์จำนวนมากสำหรับ grep piped ใหม่แต่ละอันและฉันพยายามทำสิ่งนี้โดยการสร้างไฟล์บางไฟล์ (หนึ่งสำหรับแต่ละสี) เพื่อระบุว่าพวกมันถูกใช้ไปแล้ว ฉันได้พยายามมาบ้างแล้ว แต่ก็แปลกแล้วอันนี้ดูเหมือนจะทำงานได้ดีที่สุด ฉันมีสิ่งนี้ในของฉัน.bashrc : alias mg="mygrep" mygrep(){ # define …
30 bash  shell  grep  pipe  bashrc 

5
Shell Script mktemp วิธีที่ดีที่สุดในการสร้าง pipe ที่มีชื่อชั่วคราวคืออะไร?
ฉันทราบดีที่สุดว่าควรสร้างไฟล์ชั่วคราวด้วยmktempแต่จะมีชื่อไพพ์ว่าอย่างไร ฉันชอบสิ่งที่จะเป็นไปตาม POSIX ที่สุดเท่าที่จะทำได้ แต่ Linux เท่านั้นที่ยอมรับได้ หลีกเลี่ยง Bashisms dashเป็นเกณฑ์อย่างหนักของฉันเท่านั้นที่ผมเขียน
30 linux  shell  security  pipe 

3
สิ่งที่ทำให้กระบวนการ Unix ตายด้วย Broken pipe?
นี่คือตัวเลือกบางอย่างที่ฉันคิดว่าไม่แน่ใจว่าเป็นตัวเลือกที่เหมาะสมหรือไม่ มีข้อผิดพลาด I / O ที่อ่านจากไปป์ กระบวนการเขียนไปยังปลายอีกด้านหนึ่งของท่อตายด้วยความล้มเหลว กระบวนการทั้งหมดที่สามารถเขียนไปยังไพพ์ได้ปิดลง บัฟเฟอร์การเขียนของไพพ์เต็ม เพียร์ได้ปิดทิศทางอื่น ๆ ของท่อดูเพล็กซ์ การเขียนล้มเหลวเนื่องจากไม่มีกระบวนการที่สามารถอ่านได้จากไปป์ การเรียกระบบส่งคืนข้อผิดพลาด EPIPE และไม่มีการติดตั้งตัวจัดการข้อผิดพลาด
30 pipe 

5
FIFO, pipe & Unix socket socket เป็นสิ่งเดียวกันใน Linux kernel หรือไม่?
ฉันได้ยินมาว่า FIFO มีชื่อว่าไพพ์ และพวกเขามีความหมายเดียวกัน ในทางกลับกันฉันคิดว่าซ็อกเก็ตโดเมน Unix ค่อนข้างคล้ายกับไพพ์ (แม้ว่าฉันจะไม่เคยใช้มัน) ดังนั้นฉันสงสัยว่าพวกเขาทั้งหมดอ้างถึงการใช้งานเดียวกันในเคอร์เนล Linux ความคิดใด ๆ

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