ก่อนอื่นcat
เขียนไปยังเอาต์พุตมาตรฐานซึ่งไม่จำเป็นต้องเป็นเทอร์มินัลแม้ว่าจะcat
ถูกพิมพ์เป็นส่วนหนึ่งของคำสั่งไปยังเชลล์เชิงโต้ตอบ หากคุณต้องการบางสิ่งบางอย่างในการเขียนไปยังเทอร์มินัลแม้ว่าเอาต์พุตมาตรฐานจะถูกเปลี่ยนทิศทางนั่นไม่ใช่เรื่องง่าย (คุณต้องระบุเทอร์มินัลใดและอาจไม่เป็นอย่างนั้นหากคำสั่งถูกเรียกใช้จากสคริปต์) สามารถ (ab) ใช้เอาต์พุตข้อผิดพลาดมาตรฐานหากคำสั่งเป็นเพียงส่วนหนึ่งของไพพ์ไลน์ แต่เนื่องจากคุณระบุว่าทำงานcat
จริงฉันคิดว่าคุณไม่ได้ถามเกี่ยวกับสถานการณ์เช่นนี้
หากวัตถุประสงค์ของคุณจะส่งสิ่งที่เขียนไปออกมาตรฐานเข้าไปในท่อแล้วใช้cat
จะมีสิทธิ์ที่จะใช้ประโยชน์ของรางวัลแมวตั้งแต่cat file | pipeline
(ที่pipeline
ย่อมาจากท่อใด ๆ ) <file pipeline
สามารถทำได้อย่างมีประสิทธิภาพมากขึ้นเป็น แต่อีกครั้งจากถ้อยคำของคุณฉันอนุมานว่านี่ไม่ใช่ความตั้งใจของคุณ
ดังนั้นจึงไม่ชัดเจนว่าคุณกังวลเกี่ยวกับอะไร หากคุณcat
พิมพ์นานเกินไปคุณสามารถกำหนดชื่อแทนหนึ่งหรือสองตัวอักษร (ยังคงมีชื่อบางอย่างที่ยังไม่ได้ใช้ใน Unix มาตรฐาน) หากคุณกำลังกังวลว่าcat
จะใช้รอบที่ไร้ประโยชน์คุณก็ไม่ควรทำ
หากมีโปรแกรมnull
ที่ไม่มีข้อโต้แย้งและเพียงแค่คัดลอกอินพุตมาตรฐานไปยังเอาต์พุตมาตรฐาน (วัตถุที่เป็นกลางสำหรับไพพ์ไลน์) คุณสามารถทำสิ่งที่คุณต้องการ<file null
ได้ ไม่มีโปรแกรมดังกล่าวแม้ว่ามันจะง่ายต่อการเขียน (โปรแกรม C ที่มีเพียงmain
ฟังก์ชั่นหนึ่งบรรทัดสามารถทำงานได้) แต่การโทรcat
โดยไม่มีข้อโต้แย้ง (หรือcat -
หากคุณต้องการชัดเจน) ก็เป็นเช่นนั้น
หากมีnocat
โปรแกรมที่ใช้อาร์กิวเมนต์ชื่อไฟล์หนึ่งรายการพยายามเปิดไฟล์บ่นหากไม่สามารถและดำเนินการคัดลอกจากไฟล์ไปยังเอาต์พุตมาตรฐานนั่นจะเป็นสิ่งที่คุณต้องการ มันยากกว่าการเขียนเพียงเล็กน้อยnull
งานหลักที่เปิดไฟล์ทดสอบและอาจบ่น (ถ้าคุณพิถีพิถันคุณอาจต้องรวมการทดสอบว่ามีอาร์กิวเมนต์หนึ่ง exacly และบ่นเป็นอย่างอื่น) แต่อีกครั้งcat
ตอนนี้มีอาร์กิวเมนต์เดียวทำเช่นนั้นดังนั้นจึงไม่จำเป็นสำหรับnocat
โปรแกรมใด ๆ
เมื่อคุณประสบความสำเร็จในการเขียนnocat
โปรแกรมทำไมหยุดที่อาร์กิวเมนต์เดียว? การห่อโค้ดลงในลูปfor(;*argp!=NULL;++argp)
นั้นไม่ได้ใช้ความพยายามเลยเพิ่มคำสั่งของเครื่องลงไปในไบนารีมากที่สุดและหลีกเลี่ยงการบ่นเกี่ยวกับจำนวนอาร์กิวเมนต์ที่ไม่ถูกต้อง Voilàเวอร์ชันดั้งเดิมของcat
ไฟล์ที่ต่อกัน (พูดตามตรงคุณต้องปรับแต่งนิดหน่อยเพื่อที่จะได้ไม่มีข้อโต้แย้งnull
)
แน่นอนในcat
โปรแกรมจริงพวกเขาเพิ่ม bells and whistles ไม่กี่เพราะพวกเขามักจะทำ แต่สาระสำคัญก็คือแง่มุม "การต่อข้อมูล" ของcat
ค่าใช้จ่ายนั้นไม่มีความพยายามใด ๆ เลยทั้งสำหรับโปรแกรมเมอร์และสำหรับเครื่องที่ใช้งานมัน ความจริงที่ว่าcat
subsumes null
และnocat
อธิบายถึงการไม่มีอยู่ของโปรแกรมดังกล่าว หลีกเลี่ยงการใช้cat
อาร์กิวเมนต์เดียวหากผลลัพธ์เข้าสู่ไพพ์ไลน์ แต่ถ้าใช้เพื่อแสดงเนื้อหาไฟล์บนเทอร์มินัลแม้แต่หน้าเว็บที่ฉันเชื่อมโยงเพื่อยอมรับว่านี่เป็นการใช้งานที่มีประโยชน์cat
ดังนั้นอย่าลังเลเลย
คุณอาจจะทดสอบว่าcat
จะดำเนินการจริงๆโดยห่วงง่ายๆรอบ hypthetical nocat
การทำงานโดยการเรียกcat
ด้วยชื่อไฟล์หลายหมู่ที่ชื่อที่ไม่ถูกต้องอย่างใดอย่างหนึ่งไม่ได้อยู่ในตำแหน่งแรก: มากกว่าบ่นทันทีว่าไฟล์นี้ไม่ได้มีอยู่cat
ครั้งแรกทิ้งเทมเพลตก่อนหน้า ไฟล์ที่ถูกต้องแล้วบ่นเกี่ยวกับไฟล์ที่ไม่ถูกต้อง (อย่างน้อยนั่นคือสิ่งที่แมวของฉันทำงาน)