การเปลี่ยนเส้นทางเอาต์พุตคำสั่งโดยใช้ '- <<(…)'


10

ฉันต้องการที่จะดึงชาซัม ใช้งานได้ แต่ทุกคนสามารถอธิบายได้ว่าทำไม

sed 's/^.*= //' -< <(openssl dgst -sha256 filename)

ฉันคุ้นเคยกับ$( )โครงสร้าง แต่ไม่สามารถหาเอกสาร<( )ประกอบควบคู่กับ-<ซึ่งฉันคิดว่ากำลังเปลี่ยนเส้นทางไปยังsedSTDIN

ฉันรู้ว่ามีวิธีง่ายกว่านี้ แต่สิ่งก่อสร้างนี้ทำให้ฉันหลง

คำตอบ:


10

<(openssl dgst -sha256 filename)

สร้างเป็นเปลี่ยนตัวกระบวนการ มันสร้างไฟล์ (หรือ FIFO) ที่อยู่เบื้องหลังและส่งชื่อกลับไปยังลำดับคำสั่ง

< 

เป็นการเปลี่ยนเส้นทางไฟล์ปกติเปลี่ยนเส้นทางเนื้อหาของไฟล์ behind-the-scenes ไปยังstdinและ

-

เป็นตัวยึดได้รับการยอมรับโดยชี้ให้เห็นว่าปัจจัยการผลิตที่มาจากsedstdin

เนื่องจากsedมีความสามารถในการอ่านจากไฟล์ได้อย่างสมบูรณ์-<ดูเหมือนว่าไม่จำเป็นในบริบทนี้

sed 's/^.*= //' <(openssl dgst -sha256 filename)

ควรทำงานเช่นกัน


3
หรือเพียงแค่openssl ... | sed '...'
ไมล์

8

<( COMMAND )สร้างทุบตีเรียกว่าขั้นตอนการเปลี่ยนตัว

มันจะประเมินค่าCOMMANDด้านในและเปลี่ยนเส้นทางเอาต์พุตไปยัง FIFO ซึ่งเป็นไพพ์ที่มีชื่อซึ่งได้รับไฟล์ descriptor เสมือนภายในที่/dev/fdได้รับมอบหมาย มันทำหน้าที่เหมือนไฟล์ชั่วคราวที่มีผลลัพธ์ของคำสั่งประเมิน


<สร้างทุบตีเรียกว่าการเปลี่ยนเส้นทางการป้อนข้อมูล

ใช้ตัวอธิบายไฟล์ทางด้านขวาและเปลี่ยนเส้นทางเนื้อหาไปยัง STDIN (อินพุตมาตรฐาน) ของคำสั่งทางด้านซ้าย


-ไม่ได้สร้างทุบตี แต่อาร์กิวเมนต์สำหรับการsedที่ระบุแฟ้มใส่ของ ค่าพิเศษ-หมายถึงการอ่านจาก STDIN (ซึ่งเป็นsedค่าเริ่มต้นด้วยเช่นกันดังนั้นจึงสามารถละเว้นได้)


sed 's/^.*= //' - < <(openssl dgst -sha256 filename)

บรรทัดนี้เรียกใช้openssl dgst -sha256 filenameและแคชผลลัพธ์ใน FIFO ก่อน อธิบายไฟล์ที่เป็นตัวแทนของไปป์ที่มีชื่อนี้จะถือว่าเป็นแฟ้มใส่ที่ได้รับการเปลี่ยนเส้นทางไปยัง STDIN sed 's/^.*= //' -ของ sedคำสั่งนี้อ่านจาก STDIN และลบอักขระทุกตัวก่อนหน้าสัญลักษณ์ "=" ตามด้วยช่องว่าง

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