หลายคนใช้ oneliners และสคริปต์ที่มีรหัสตามบรรทัด
cat "$MYFILE" | command1 | command2 > "$OUTPUT"
ครั้งแรกที่cat
มักจะเรียกว่า "การใช้ประโยชน์จากแมว" เพราะในทางเทคนิคมันต้องเริ่มต้นกระบวนการใหม่ (มัก/usr/bin/cat
) ซึ่งสามารถหลีกเลี่ยงได้ถ้าคำสั่งได้รับ
< "$MYFILE" command1 | command2 > "$OUTPUT"
เพราะเชลล์จะต้องเริ่มcommand1
และชี้stdin
ไปที่ไฟล์ที่กำหนดเท่านั้น
เหตุใดเปลือกจึงไม่ทำการแปลงนี้โดยอัตโนมัติ ฉันรู้สึกว่าไวยากรณ์ "ใช้งานไร้ประโยชน์ของแมว" ง่ายต่อการอ่านและเชลล์ควรมีข้อมูลเพียงพอที่จะกำจัดแมวไร้ประโยชน์โดยอัตโนมัติ cat
ถูกกำหนดไว้ในมาตรฐาน POSIX เพื่อให้เปลือกควรได้รับอนุญาตที่จะใช้มันภายในแทนการใช้ไบนารีในเส้นทาง เชลล์สามารถมีการนำไปใช้งานสำหรับอาร์กิวเมนต์หนึ่งรุ่นเท่านั้นและทางเลือกในการไบนารี
lseek
ยังคงเป็นพฤติกรรมที่กำหนดไว้และอาจทำให้เกิดผลลัพธ์ที่แตกต่างกันพฤติกรรมการปิดกั้นที่แตกต่างกันอาจมีความหมายในเชิงความหมาย ฯลฯ มันจะอนุญาตให้ทำการเปลี่ยนแปลงได้หากคุณรู้ว่าคำสั่งอื่น ๆหรือถ้าคุณไม่สนใจความเข้ากันได้ในระดับนั้น แต่ข้อดีก็คือค่อนข้างเล็ก ฉันคิดว่าการขาดผลประโยชน์ขับเคลื่อนสถานการณ์มากกว่าค่าความสอดคล้อง
cat
ตัวเองอย่างแน่นอนหรือยูทิลิตี้อื่น ๆ นอกจากนี้ยังได้รับอนุญาตให้รู้ว่ายูทิลิตี้อื่น ๆ ที่เป็นของระบบทำงานอย่างไร (เช่นสามารถรู้ได้ว่าการgrep
ใช้งานภายนอกที่มาพร้อมกับระบบทำงานอย่างไร) นี่เป็นสิ่งที่ปฏิบัติได้อย่างสมบูรณ์ดังนั้นจึงยุติธรรมเลยที่จะสงสัยว่าทำไมพวกเขาถึงไม่ทำ
grep
ดังนั้นเปลือกในขณะนี้มีการพึ่งพาการทำงานของที่ และsed
. และawk
. และdu
. และมีสาธารณูปโภคอื่น ๆ อีกหลายร้อยหากไม่นับพัน