เปลือย <ทำอะไร?


10

bash ดูเหมือนจะไม่บ่นถ้าคุณเรียกใช้คำสั่งเช่น

$ < some-file-that-exists

ดูเหมือนจะไม่มีอะไรเกิดขึ้น

คุณสามารถใช้

$ <<<"any string"

และแม้แต่กระบวนการทดแทน

แล้วมันทำอะไรกันแน่และทำไมมันถึงได้รับอนุญาต มันจะมีประโยชน์สำหรับอะไร?


BTW: สำหรับ ZSH ที่ยอดเยี่ยม "<foobar" นั้นเหมือนกับ "less foobar" เหมือนกับ foobar ที่เปลี่ยนเส้นทางของคุณไปยังเชลล์ ฉันคิดว่านี่เป็นพฤติกรรมที่ใช้งานง่ายมาก เปล่า<จะทำให้คุณมีข้อผิดพลาด ( zsh: parse error near `\n') เป็นอาร์กิวเมนต์ไม่ได้รับ
คณิตศาสตร์

@math คุณจะได้รับข้อผิดพลาดที่คล้ายกันในแต่ที่เป็นเรื่องเกี่ยวกับที่น่าสนใจbash less
ยาขยายตัว

คำตอบ:


20

<ตั้งค่าการเปลี่ยนเส้นทางสำหรับคำสั่งที่อาจเกิดขึ้นก่อนหรือหลังคำแนะนำการเปลี่ยนเส้นทาง กล่าวคือ

$ < file wc

ทำงานได้ดีเช่นกัน

$ wc < file

แต่ถ้าคุณไม่ให้คำสั่ง bash จะทำการเปลี่ยนเส้นทางและไม่ทำอะไรเลย สำหรับการเปลี่ยนเส้นทางอินพุตจำนวนนี้เป็นสิ่งที่คุณเห็นไม่มีอะไรเลยถ้าไฟล์นั้นมีอยู่และอ่านได้ หากไฟล์ไม่มีอยู่หรือไม่สามารถอ่านได้ทุบตีจะส่งสัญญาณข้อผิดพลาด สำหรับการเปลี่ยนเส้นทางเอาต์พุตไฟล์เอาต์พุตจะถูกสร้างขึ้นหากไม่มีอยู่ ไฟล์เอาต์พุตใด ๆ ที่มีอยู่จะถูกตัดถ้า>ใช้ ไม่มีการตัดถ้า>>ใช้


ในคำอื่น ๆ พวกเขามีความรัดกุมและสร้าง
ประหลาดวงล้อ

@ Kyle Jones ฉันคิดว่าคุณไม่ตรงกับสองผู้ประกอบการในประโยคสุดท้าย
jamesbtate

@Puddingfox ขอบคุณ ฉันได้แก้ไขประโยค run-on ในตอนท้ายเพื่อชี้แจง
Kyle Jones

มีเหตุผลใดที่จะใช้< file wcกับwc < file?
ยาขยายตัว

1
@tandu มีประโยชน์เมื่อใช้เชลล์แบบโต้ตอบ สมมติว่าคุณมีคำสั่งที่ใช้การเปลี่ยนเส้นทางและคุณต้องการทำซ้ำด้วยอาร์กิวเมนต์สุดท้ายที่แตกต่างกัน หากการเปลี่ยนเส้นทางอยู่ที่จุดเริ่มต้นของบรรทัดมันเป็นเรื่องง่ายที่จะพิมพ์ control-P แล้วแก้ไขอาร์กิวเมนต์สุดท้ายโดยไม่ต้องข้ามภาษา "<foo> bar 2> & 1" ตามที่คุณต้องการ นอกเหนือจากนั้นฉันไม่พบประโยชน์สำหรับมัน
Kyle Jones

5

<อ่านจาก stdin โดยค่าเริ่มต้นหรือไฟล์ การแสดงออกของคุณไม่ได้ทำอะไรกับอินพุตเพราะคุณไม่ได้ทำอะไรหลังจากอ่าน

ถ้าคุณทำ <some-file-that-exist> outputfile ในตอนท้ายคุณจะเห็นว่าคุณเพิ่งอ่านเนื้อหาของไฟล์แรกและเขียนไปยังไฟล์ที่สอง

<<< นี่คือรูปแบบ doc ดังนั้นจึงอ่านจากสตริงแทนไฟล์ แมว <<< "สตริงใด ๆ " เพื่อดูสิ่งที่คุณได้อ่าน


2
สำหรับการอ้างอิงในอนาคตโปรดแก้ไขคำตอบของคุณเพื่อเพิ่มรายละเอียดแทนการเพิ่มความคิดเห็น
Nate Koppenhaver

2
"ถ้าคุณทำ <some-file-that-exist> outputfile ในตอนท้ายคุณจะเห็นว่าคุณเพิ่งอ่านเนื้อหาของไฟล์แรกและเขียนไปยังไฟล์ที่สอง" นี่เป็นสิ่งที่ผิด ไฟล์เอาต์พุตจะถูกตัดให้เหลือศูนย์ไบต์
Kyle Jones
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.