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

ท่อเชื่อมต่อเอาต์พุตของโปรแกรมหนึ่งกับอินพุตของโปรแกรมอื่น สิ่งนี้ใช้โดยเฉพาะเพื่อใช้เชลล์ | ผู้ประกอบการ

8
ความแตกต่างระหว่าง "การเปลี่ยนเส้นทาง" และ "ท่อ" คืออะไร?
คำถามนี้อาจฟังดูโง่เล็กน้อย แต่ฉันไม่เห็นความแตกต่างระหว่างการเปลี่ยนเส้นทางและไพพ์ การเปลี่ยนเส้นทางที่ใช้ในการเปลี่ยนเส้นทาง stdout / stdin / stderr ls > log.txtเช่น ท่อที่ใช้ในการให้การส่งออกของคำสั่งเป็น input ls | grep file.txtเพื่อคำสั่งอื่นเช่น แต่ทำไมมีผู้ให้บริการสองรายสำหรับสิ่งเดียวกัน ทำไมไม่เพียงแค่เขียนls > grepเพื่อส่งผ่านผลลัพธ์การเปลี่ยนเส้นทางแบบนี้ไม่ใช่หรือ ฉันกำลังคิดถึงอะไร
204 pipe  redirect 

2
ฉันจะไพพ์เอาต์พุตมาตรฐานของเทอร์มินัล (stdout) ไปยังคลิปบอร์ดได้อย่างไร
ตัวอย่างเช่น, สมมติว่าฉันต้องการแสดงรายการเนื้อหาของโฟลเดอร์และวางลงในหน้าต่างแชทโดยตรงเพื่อให้เพื่อนเห็น ฉันรู้ว่าฉันสามารถทำได้ls > filename.txtเพื่อสร้างไฟล์ (filename.txt) พร้อมเนื้อหาเหล่านั้น ฉันจะต้องเปิดหรือพิมพ์ไฟล์และเลือกและคัดลอกบล็อกข้อความด้วยตนเอง ( ซึ่งน่ารำคาญ / น่าเบื่อ ) ฉันสามารถเลือกและคัดลอกผลลัพธ์lsโดยตรงจากภายในหน้าต่างเทอร์มินัลได้อย่างชัดเจน มันจะได้เร็วขึ้นมาก / ง่ายเพียงแค่ออกมาตรฐานท่อไปยังคลิปบอร์ด คำสั่งเทอร์มินัลอนุญาตให้ฉันทำอะไรได้บ้าง?

4
เหตุใดจึงใช้ไพพ์ที่มีชื่อแทนที่จะเป็นไฟล์
ฉันเพิ่งอ่านเกี่ยวกับชื่อไปป์และฉันไม่เข้าใจว่าทำไมมันถึงมีอยู่ ฉันได้อ่านบางที่ว่าการใช้ไพพ์ที่มีชื่อนั้นใช้เวลาน้อยกว่าการใช้ไฟล์ ทำไมเป็นเช่นนี้ ไปป์ที่มีชื่อจะต้องถูกเก็บไว้ในหน่วยความจำ (และอาจสลับเช่นเดียวกับไฟล์) เท่าที่ฉันเห็นพวกเขาจะต้องได้รับ inode ซึ่งจะต้องอ้างอิงโดยไดเรกทอรีปัจจุบันเช่นเดียวกับไฟล์ นอกจากนี้โปรแกรมเมอร์จะต้องถูกลบออกเช่นเดียวกับไฟล์ ดังนั้นข้อดีอยู่ที่ไหน?
42 files  pipe 

8
ทำไมคำสั่ง“ ls | ไม่ถึง ไฟล์” ทำงานอย่างไร
ฉันได้ศึกษาเกี่ยวกับบรรทัดคำสั่งและเรียนรู้ว่า|(ไปป์ไลน์) นั้นหมายถึงการเปลี่ยนทิศทางเอาต์พุตจากคำสั่งไปยังอินพุตของอีกอันหนึ่ง เหตุใดคำสั่งls | fileจึงไม่ทำงาน file อินพุตเป็นหนึ่งในชื่อไฟล์เพิ่มเติมเช่น file filename1 filename2 lsเอาท์พุทเป็นรายการของไดเรกทอรีและไฟล์ในโฟลเดอร์ดังนั้นฉันคิดว่าls | fileควรจะแสดงประเภทไฟล์ของทุกไฟล์ในโฟลเดอร์ เมื่อฉันใช้มันอย่างไรก็ตามผลลัพธ์คือ: Usage: file [-bcEhikLlNnprsvz0] [--apple] [--mime-encoding] [--mime-type] [-e testname] [-F separator] [-f namefile] [-m magicfiles] file ... file -C [-m magicfiles] file [--help] เนื่องจากมีข้อผิดพลาดบางอย่างกับการใช้fileคำสั่ง

4
ฆ่ากระบวนการ Java
ฉันกำลังทำงานกับรหัสหนักที่คำนวณได้ซึ่งตอนนี้ล่มมาก แต่ฉันยังคงทำงานอยู่ :) เมื่อเกิดปัญหาฉันไม่สามารถปิดหน้าต่าง GUI ได้ ฉันต้องเปิดเปลือกและฆ่ากระบวนการ -9 มันเป็นกระบวนการของจาวาและหาง่าย: nkint@zefiro:~$ ps aux | grep java nkint 2705 16.6 1.0 460928 43680 ? Sl 12:23 0:08 /usr/lib/jvm/java-6-sun-1.6.0.26/bin/java -Djava.library.path=something something nkint 2809 0.0 0.0 4012 776 pts/0 S+ 12:24 0:00 grep --color=auto java nkint@zefiro:~$ kill -9 2705 ตอนนี้มันง่าย แต่ค่อนข้างเป็นงานเชิงกล ปกติแล้วฉันรอประมาณ 7-8 โพรเซสที่จะพังแล้วkill …
25 process  kill  pipe 

4
ฉันจะนำไพพ์อินพุตไปยังคำสั่ง ls ได้อย่างไร?
เมื่อฉันพิมพ์บางสิ่งที่ชอบ: find . -name *foo* | ls -lah มันจะส่งกลับผลลัพธ์เช่นเดียวกับlsคำสั่งธรรมดาราวกับว่ามันไม่มีอินพุต อย่างไรก็ตาม: ls -lah $( find . -name *foo* ) ทำงานได้ดี แต่เฉพาะเมื่อfindคำสั่งมีผลลัพธ์ เป็นไปได้ที่จะท่อไปls?
20 bash  command-line  ls  pipe 

5
ฉันจะรันคำสั่ง FTP ในหนึ่งบรรทัดได้อย่างไร
นี่คือสิ่งที่ฉันทำเมื่อลงชื่อเข้าใช้ FTP: ftp user:password@server ftp: user:password@server: Unknown host ftp> echo HELLO WORLD! ftp> quit ฉันต้องการใช้คำสั่ง FTP แบบบรรทัดเดียว ... ftp user:password@server -command "echo HELLO WORLD" หรือ "echo HELLO WORLD" | ftp user:password@server สิ่งที่คล้ายกัน ... เป็นส่วนหนึ่งของสคริปต์ที่ฉันพยายามสร้าง ไม่มีการถ่ายโอนอะไรฉันเพียงแค่ต้องก้องคำแนะนำและนี่คือวิธีที่ง่ายที่สุดที่ฉันพบว่าทำระหว่างสองระบบของฉัน
18 10.10  command-line  ftp  pipe 

1
คลายการบีบอัดและไพพ์เอาต์พุตไปยังสคริปต์
ฉันมีสคริปต์ที่ใช้อินพุตพร้อม-iแฟล็ก ไฟล์อินพุตที่ฉันมีถูกบีบอัด (.gz) สิ่งที่ฉันต้องการทำ (ไม่แน่ใจว่าเป็นไปได้) เนื่องจากไฟล์มีขนาดใหญ่ให้ทำสิ่งนี้: gunzip -c myfile.gz | myScript.pl -i STDIN -o myoutfile.txt ดังนั้นไพพ์เอาท์พุทของการบีบอัดไปยังแฟล็กอินพุตสคริปต์ของฉัน
14 pipe  gzip 

3
ทำไมคำสั่ง pipe“ l | grep” 1“” ได้รับผลที่ผิดหรือเปล่า?
ดังที่แสดงในรูปภาพฉันใช้lเพื่อรับไฟล์ในโฟลเดอร์ปัจจุบัน แล้วฉันต้องการที่จะได้รับไฟล์ที่มีจำนวน1ดังนั้นฉันใช้และpipegrep แต่ทำไม2และ22ไฟล์จึงแสดงออกมา และอะไรคือสิ่งที่1;34m? $ l ./ ../ 1 11 2 22 $ l | grep "1" 1;34m./ 1;32m../ 1 11 2 22 ปรับปรุง ฉันได้ตั้งชื่อแทนคำสั่งlไว้ในzshrcไฟล์แล้ว alias lsp="ls" alias ll='ls -alF' alias la='ls -A' alias l='ls -CF' alias ls="ls -alh --color" และนี่คือผลลัพธ์ของtypeคำสั่ง: >$ type ls ls is an alias for ls …
13 command-line  grep  ls  pipe 

2
ไฟล์ curl .gz และไปป์สำหรับการคลายการบีบอัด
ฉันกำลังพยายามดาวน์โหลด.gzไฟล์บางไฟล์ (ไม่ใช่ NB .tar.gz) จาก URL ที่กำหนดและขยายไฟล์เหล่านั้นเพื่อเขียนทับไฟล์ที่มีอยู่ถ้ามี สำหรับการดาวน์โหลดแต่ละครั้งฉันลองต่อไปนี้: curl -O $URL | gunzip -f อย่างไรก็ตามสิ่งนี้ไม่ทำงานตามที่ล้มเหลวด้วย: gzip: stdin: unexpected end of file. ฉันใช้ชุดคำสั่งนี้ในสคริปต์เชลล์ bash หากฉันรั่วไหลคำสั่งออกเป็นสองขั้นตอนอย่างชัดเจนนั่นคือขั้นแรกให้ดาวน์โหลดไฟล์จากนั้นขยายขนาด.gzไฟล์มันจะทำงาน เหตุใดรุ่นของ piped จึงใช้งานไม่ได้
13 bash  scripts  curl  pipe  gzip 

4
คำสั่ง build โดยการต่อสตริงเข้าใน bash
ฉันมีสคริปต์ทุบตีที่สร้างบรรทัดคำสั่งในสตริงตามพารามิเตอร์บางอย่างก่อนดำเนินการในครั้งเดียว ชิ้นส่วนที่ถูกต่อเข้ากับสตริงคำสั่งควรถูกคั่นด้วยไพพ์เพื่ออำนวยความสะดวกในการ "สตรีม" ของข้อมูลผ่านแต่ละส่วนประกอบ ตัวอย่างที่ง่ายมาก: #!/bin/bash part1=gzip -c part2=some_other_command cmd="cat infile" if [ ! "$part1" = "" ] then cmd+=" | $part1" fi if [ ! "$part2" = "" ] then cmd+=" | $part2" fi cmd+="> outfile" #show command. It looks ok echo $cmd #run the command. fails with pipes …
13 bash  pipe 

3
วิธีลบไฟล์ทั้งหมดที่ส่งคืนโดยการค้นหา
ในขณะที่เขาเป็นสิ่งที่ฉันทำ: ขั้นตอนที่ 1: locate fooBar /home/abc/fooBar /home/abc/Music/fooBar ขั้นตอนที่ 2: ทำการลบด้วยตนเองโดยการคัดลอกวางแต่ละบรรทัด rm /home/abc/fooBar rm /home/abc/Music/fooBar ฉันจะทำสิ่งนี้ในขั้นตอนเดียวได้อย่างไร สิ่งที่ต้องการ ค้นหา fooBar> rm ขอบคุณ

4
ต่อท้ายบรรทัดไปยังไฟล์ในคำสั่ง cat?
ฉันสามารถทำได้cat file.txtเพื่อรับเนื้อหาของไฟล์ แต่ฉันยังต้องการที่จะใช้วิธีสุดท้ายในการเลือกของฉันเอง ฉันลองใช้ piping (cat file.txt ; echo "My final line") |แต่มีเพียงบรรทัดสุดท้ายเท่านั้นที่ถูกส่งผ่านท่อ ฉันจะเข้าร่วมแมวและบรรทัดสุดท้ายได้อย่างไร แก้ไขเพื่อความกระจ่าง: ฉันไม่ต้องการแก้ไขไฟล์เอง ผมทราบว่าถ้าเป็นกรณีที่ฉันจะทำecho "My final line" >> file.txtหรือecho "My final line" | tee -a file.txtแต่ฉันเป็นเพียงการพยายามที่จะทำผนวกในบริบทของคำสั่งนี้โดยเฉพาะอย่างยิ่งเพื่อให้สามารถท่อเรียงต่อกันของและfile.txt"My final line"
12 command-line  pipe  cat  echo 

3
ฉันจะหยุดการติดตามผลลัพธ์ในเวลาน้อยกว่าโดยไม่มีผลต่อคำสั่งที่สร้างผลลัพธ์ได้อย่างไร
ฉันใช้เซิร์ฟเวอร์และบันทึกของเซิร์ฟเวอร์นี้ได้รับการเข้าสู่ระบบใน terminal ไม่ได้อยู่ในไฟล์ใด ๆ ฉันต้องการใช้งานน้อยลงเพื่อดูบันทึกนี้ node server.js | less เมื่อฉันต้องการดูบันทึกฉันใช้กดShift+ Fเพื่อไปยังจุดสิ้นสุดไฟล์และเฝ้าดูบันทึก เมื่อฉันต้องการที่จะหยุดมันผมใช้+CTRLC โชคไม่ดีที่นี่หยุดเซิร์ฟเวอร์เช่นกัน ฉันแค่ต้องการหยุดดูจุดสิ้นสุดของบันทึกโดยไม่ต้องหยุดเซิร์ฟเวอร์ ทำอย่างไร

2
Tee ไม่ได้รับผลลัพธ์ทั้งหมดจากไปป์
ฉันมีสคริปต์ดำเนินการคำสั่งเช่น: export LD_LIBRARY_PATH=.:$LD_LIBRARY_PATH;./some_app -i $INDEX | tee $LOG echo "Number of errors: $(grep "ERROR" $LOG | wc -l)" teeปัญหาอาจจะอยู่ในท่อ ดูเหมือนจะไม่ได้รับผลลัพธ์ทั้งหมด เมื่อแอปพลิเคชันหยุดทำงานไม่กี่บรรทัดสุดท้ายของเอาต์พุต (โดยปกติจะเป็นแอปที่มีข้อผิดพลาดร้ายแรง) หายไป เมื่อฉันเรียกใช้แอพโดยไม่ต้องไปป์teeฉันก็เอามันออกมาได้ ฉันจะบังคับให้สคริปต์รอทีเพื่อประมวลผลเอาต์พุตทั้งหมดได้อย่างไร

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