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

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

1
วิธีไพพ์ html เป็น lynx
ฉันกำลังทดสอบการโทร ajax จากคอนโซล ฉันชอบกำจัดเสียงรบกวนข้อมูล meta ที่เป็นมาร์กอัพ HTML และเพิ่งอ่านเนื้อหาดังนั้นฉันชอบที่จะไพพ์มันลงในเทอร์มินัลเบราว์เซอร์เช่น lynx แต่: curl www.google.de | lynx เพิ่งเปิด lynx ตัวอย่างใหม่ ฉันไม่ต้องการ: curl www.google.de &gt; someFile.html &amp;&amp; lynx someFile.html
11 pipe  curl  html  stdin  lynx 

2
ส่งรหัสผ่านผ่าน stdin ใน `ssh-copy-id`
ssh-copy-idฉันต้องการที่จะทำงานโดยอัตโนมัติการใช้งานตัวตนบางนึกคิดใช้ ฉันพยายามให้รหัสผ่าน stdin ซึ่งเป็นไปได้sshโดยใช้การ-Sตั้งค่าสถานะ ฉันทราบว่าฉันสามารถส่งตัวเลือกเพิ่มเติมเพื่อsshใช้การ-oตั้งค่าสถานะในssh-copy-idคำสั่ง แต่ไม่มีตัวอย่างการใช้งานของการตั้งค่าสถานะนี้ในหน้า man ดังนั้นฉันพยายามส่งรหัสผ่าน SSH สำหรับssh-copy-idผ่าน stdin โดยใช้: $# echo $TMP_PASS | ssh-copy-id -p2222 -i key.pub user@host -o "-S" แต่สิ่งที่ฉันได้รับคือ: /bin/ssh-copy-id: ERROR: command-line: line 0: Bad configuration option: -s แก้ไข: ฉันพยายามให้รหัสผ่าน stdin ซึ่งเป็นไปได้ sshโดยใช้การ-Sตั้งค่าสถานะ คำสั่งนี้ผิด ฉันอ่านธงนี้จากsudoมนุษย์จริงๆ


3
เป็นไปได้หรือไม่ที่จะเปิดเผยช่องสัญญาณ TCP ใน Linux เป็นอุปกรณ์ตัวอักษรพิเศษ?
เมื่อเร็ว ๆ นี้ฉันพบในเอกสารประกอบ QNX ที่อนุญาตให้ติดตั้ง IPC แบบข้อความระหว่างกระบวนการในเครื่องทางกายภาพแยกโดยใช้อุปกรณ์อนุกรม ( dev/serX) และทำให้ฉันสงสัยว่า: เป็นไปได้ใน Linux ที่จะสร้างอุปกรณ์พิเศษทั้งระบบสำหรับอุโมงค์ TCP / UDP? สิ่งที่ต้องการncstdin / stdout เปิดเผยต่อสาธารณะภายใต้ / dev / บางสิ่งบางอย่าง ในท้ายที่สุดฉันต้องการที่จะสามารถเขียนบางสิ่งบางอย่างไปยังไฟล์ดังกล่าวบนเครื่องหนึ่งและรับมันในส่วนอื่น ๆ : #machine1: echo "Hello" &gt; /dev/somedev #machine2: cat &lt; /dev/somedev ฉันดูncผู้ชาย แต่ฉันไม่พบตัวเลือกใด ๆ ในการระบุแหล่งที่มา / ปลายทางของ io นอกเหนือจาก stdio

2
วิธีการส่งผ่านข้อโต้แย้งไปยังสคริปต์ซึ่งเป็นอินพุตเพื่อทุบตี
ตอนนี้ฉันมีซับในแบบนี้: curl -fsSL http://git.io/vvZMn | bash มันกำลังดาวน์โหลดสคริปต์และส่งต่อเพื่อทุบตีเป็นไฟล์ stdin printผมอยากจะเรียกใช้สคริปต์นี้กับอาร์กิวเมนต์เพิ่มเติม อาจจะเป็นเช่นนี้? curl -fsSL http://git.io/vvZMn | bash -- print แต่มันไม่ได้ผล
10 bash  pipe  curl  input 

2
จะส่งเอาต์พุตทั้งหมดไปยัง 'logger' ใน POSIX เชลล์ได้อย่างไร?
ฉันต้องการที่จะเข้าสู่ระบบการส่งออกมาตรฐานและข้อผิดพลาดมาตรฐานแยกต่างหากในการใช้.xprofile loggerใน Bash ฉันคิดว่ามันจะมีหน้าตาแบบนี้: exec 1&gt; &gt;(logger --priority user.notice --tag $(basename $0)) \ 2&gt; &gt;(logger --priority user.error --tag $(basename $0)) ฉันจะทำสิ่งนั้นในลักษณะที่รองรับPOSIX /bin/shได้อย่างไร
10 shell  pipe  posix 

3
ไพพ์สคริปต์ด้วย“ อ่าน” เพื่อทุบตี
ฉันต้องการเรียกใช้สคริปต์โดยการไพพ์สคริปต์ผ่านbashด้วยwget(แทนที่จะรันสคริปต์โดยตรงด้วยการทุบตี) $ wget -O - http://example.com/my-script.sh | bash มันไม่ทำงานเพราะสคริปต์ของฉันมีreadข้อความอยู่ ด้วยเหตุผลบางอย่างสิ่งเหล่านี้ใช้ไม่ได้เมื่อไปป์เพื่อทุบตี: # Piping to bash works in general $ echo 'hi' hi $ echo "echo 'hi'" | bash hi # `read` works directly $ read -p "input: " var input: &lt;prompt&gt; # But not when piping - returns immediately $ echo …
10 bash  shell  pipe  read 

3
ตรวจสอบ md5sum จากไปป์
ฉันสับสนว่าmd5sum --checkควรจะทำงานอย่างไร: $ man md5sum -c, --check read MD5 sums from the FILEs and check them ฉันมีไฟล์ฉันสามารถไปที่md5sum: $ cat file | md5sum 44693b9ef883e231cd9f90f737acd58f - เมื่อฉันต้องการตรวจสอบความสมบูรณ์ของไฟล์ในวันพรุ่งนี้ฉันจะตรวจสอบว่า md5sum ยังคงอยู่ได้44693b9ef883e231cd9f90f737acd58fอย่างไร? บันทึก cat fileอาจเป็นกระแส md5sum fileดังนั้นผมจึงต้องการที่จะใช้ท่อเช่นในตัวอย่างของฉันไม่
10 pipe  hashsum 

2
ส่งสำเนาของเอาต์พุตสคริปต์ไปยังไฟล์
สมมติว่าฉันมีสคริปต์ Zsh และฉันต้องการให้มันพิมพ์ผลลัพธ์ไปSTDOUTยัง แต่ก็คัดลอก (ดัมพ์) เอาต์พุตไปยังไฟล์ในดิสก์ ยิ่งกว่านั้นสคริปต์เริ่มต้นด้วยตัวเลือกต่อไปนี้ set -o xtrace ซึ่งบังคับให้มันเป็น verbose และพิมพ์คำสั่งที่มันทำงาน ฉันต้องการที่จะจับเอาท์พุทนี้เช่นกันในไฟล์ในดิสก์ ความเข้าใจของฉันคือถ้าฉันทำ ./my_script.sh &gt; log.txt มันจะส่งSTDOUTไปlog.txtแต่ถ้าฉันต้องการที่จะเห็นเอาท์พุทใน terminal? ฉันได้อ่านเกี่ยวกับteeและMULTIOSตัวเลือกใน zsh แต่ฉันไม่แน่ใจว่าจะใช้พวกเขา เมื่อฉันทำ: ./my_script | tee log.txt ฉันสามารถเห็นผลลัพธ์บนเทอร์มินัล แต่ไฟล์ไม่log.txtเห็นว่าจะจับทุกอย่าง (อันที่จริงมันเก็บแทบทุกอย่าง)

3
ตัวแปรสภาพแวดล้อมไม่ได้ถูกตั้งค่าเมื่อฟังก์ชั่นของฉันถูกเรียกในไปป์ไลน์
ฉันมีฟังก์ชันแบบเรียกซ้ำต่อไปนี้เพื่อตั้งค่าตัวแปรสภาพแวดล้อม: function par_set { PAR=$1 VAL=$2 if [ "" != "$1" ] then export ${PAR}=${VAL} echo ${PAR}=${VAL} shift shift par_set $* fi } ถ้าฉันเรียกมันด้วยตัวมันเองมันจะตั้งค่าตัวแปรและ echoes เป็น stdout: $ par_set FN WORKS FN=WORKS $ echo "FN = "$FN FN = WORKS การเปลี่ยนเส้นทาง stdout ไปยังไฟล์ยังใช้งานได้: $ par_set REDIR WORKS &gt; out cat …

4
รับ stdin จากไปป์ที่มีชื่อ
สิ่งที่ฉันพยายามทำคือใช้ python ในหน้าต่างเทอร์มินัลและเปลี่ยนเส้นทางมันเป็น stdin จากไพพ์ที่มีชื่อ จากนั้นฉันเขียนไปที่ไปป์ที่มีชื่อในเทอร์มินัลอื่นและมีคำสั่งที่รันบนหลาม อาคาร 1: mkfifo p1 python &lt; p1 อาคาร 2: echo -n "print \"Hello World\"" &gt; p1 สิ่งที่เกิดขึ้นคือ - หลามพิมพ์Hello Worldและออกจาก สิ่งที่ฉันต้องการจะทำคือให้หลามใช้คำสั่งถัดไป ฉันจะทำสิ่งนี้ในเปลือกได้อย่างไร

4
วิธีที่ง่ายที่สุดในการดำเนินการข้อความจากหางที่บรรทัดคำสั่งคืออะไร?
บางครั้งฉันกำลังทำงานกับกล่องใหม่ (อูบุนตู) และฉันพิมพ์gitและได้รับการแจ้งเตือน: The program 'git' is currently not installed. You can install it by typing: apt-get install git-core หากเกิดขึ้นฉันรู้ว่าฉันสามารถคว้าบรรทัดสุดท้ายโดยทำสิ่งที่ชอบ: !! 2&gt;&amp;1 | tail -n 1 แต่ฉันจะรันผลลัพธ์ของ (นั้นapt-get install git-core) ได้อย่างง่ายดายที่สุดได้อย่างไร ฉันรู้ว่าฉันสามารถทำได้ `!! 2&gt;&amp;1 | tail -n 1` แต่ยังมีวิธีที่จะส่งออกไปป์ไลน์จริง ๆ และมีการเรียกใช้หรือไม่ ดูเหมือนจะใช้งานไม่ได้: !! 2&gt;&amp;1 | tail -n 1 | sh …

3
gzip - การเปลี่ยนเส้นทางหรือท่อ?
ฉันจะสำรองดิสก์ขนาดใหญ่ (750GB) ไปยังดิสก์ USB ภายนอกโดยใช้ dd ฉันควรจะใช้การเปลี่ยนเส้นทางหรือท่อ? อันไหนมีประสิทธิภาพมากกว่ากัน? หรือมีความแตกต่าง? นอกจากนี้ขนาดบล็อกที่ดีที่สุดคืออะไร? USB น่าจะเป็นคอขวดที่นี่ dd if=/dev/sda bs=1M | gzip -c &gt; /mnt/sdb1/backups/disk.img.gz gzip -dc /mnt/sdb1/backups/disk.img.gz | dd of=/dev/sda bs=1M VS dd if=/dev/sda bs=1M | gzip -c | dd of=/mnt/sdb1/backups/disk.img.gz dd if=/mnt/sdb1/backups/disk.img.gz | gzip -dc | dd of=/dev/sda bs=1M ขอบคุณ
10 linux  gzip  pipe  dd 

4
ให้สคริปต์ทุบตีรอข้อความสถานะก่อนดำเนินการต่อ
ฉันยิงเซิร์ฟเวอร์ Selenium ด้วยสคริปต์ทุบตีและอย่างที่คุณเห็นจากการประทับเวลาในบันทึกด้านล่างใช้เวลาประมาณ 32 วินาทีสำหรับสิ่งที่จะมาออนไลน์อย่างสมบูรณ์: Feb 28, 2012 10:19:02 PM org.openqa.grid.selenium.GridLauncher main INFO: Launching a standalone server 22:19:02.835 INFO - Java: Sun Microsystems Inc. 20.0-b11 22:19:02.836 INFO - OS: Linux 2.6.32-220.4.1.el6.x86_64 amd64 22:19:02.852 INFO - v2.19.0, with Core v2.19.0. Built from revision 15849 22:19:02.988 INFO - RemoteWebDriver instances should connect …
10 bash  logs  pipe  search  selenium 

2
การเชื่อมต่อ STDOUT และ STDIN หมายถึงอะไร
ฉันอ่านหนังสือมันพูดว่า: ทุกกระบวนการมีช่องทางการสื่อสารอย่างน้อยสามช่อง: "อินพุตมาตรฐาน" (STDIN), "เอาต์พุตมาตรฐาน" (STDOUT) และ "ข้อผิดพลาดมาตรฐาน" (STDERR) คำสั่งส่วนใหญ่ยอมรับอินพุตจาก STDIN และเขียนเอาต์พุตไปยัง STDOUT พวกเขาเขียนข้อความแสดงข้อผิดพลาดไปยัง STDERR การประชุมนี้ช่วยให้คุณสามารถใช้คำสั่งสตริงร่วมกันเช่นแบบเอกสารสำเร็จรูปเพื่อสร้างไปป์ไลน์คอมโพสิต เปลือกตีความสัญลักษณ์&lt;, &gt;และ&gt;&gt;เป็นคำแนะนำในการเปลี่ยนเส้นทางการป้อนคำสั่งหรือการส่งออกไปยังหรือจากไฟล์ ในการเชื่อมต่อ STDOUT ของคำสั่งเดียวกับ STDIN ของอีกคำสั่งให้ใช้| สัญลักษณ์ที่รู้จักกันทั่วไปว่าเป็นไปป์ ps -ef | grep httpd ดังนั้นโดยทั่วไปสิ่งที่กล่าวคืออินพุตมาตรฐานเป็นคำสั่งที่อนุญาตให้ผู้ใช้เขียนไฟล์ในขณะที่เอาต์พุตมาตรฐานเป็นคำสั่งที่มี bash เชลล์เขียนเอาต์พุตไปยังเชลล์และข้อผิดพลาดมาตรฐานเป็นเหมือนเอาต์พุต แต่เป็นเพียง เรียกใช้เมื่อมีข้อผิดพลาดในระบบไฟล์ จากนั้นเราไปถึงส่วนของการเชื่อมต่อ STDOUT และ STDIN และฉันก็หลงทาง

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