ปัญหาอยู่ในไวยากรณ์ที่ใช้ในบทความที่เชื่อมโยง เพื่อให้เข้าใจถึงสิ่งที่ผิดพลาดเรามาดูman wall
กัน:
การใช้งานจากman wall
:
wall [file]
Wall displays the contents of file or, by default, its standard input
ดังนั้นwall
ยอมรับทั้งสองแหล่งสำหรับข้อความ
อาร์กิวเมนต์ชื่อไฟล์
อาร์กิวเมนต์บรรทัดคำสั่งใด ๆ ที่กำหนดwall
ให้ต้องเป็นชื่อไฟล์ เนื่องจากไม่มีวิธีที่เชื่อถือได้ที่จะบอกได้ว่าอาร์กิวเมนต์นั้นมีความหมายเป็นข้อความหรือชื่อไฟล์wall
จะถือว่าเป็นตัวหลังไม่สนใจสิ่งที่เข้ามาในอินพุตมาตรฐานและลองอ่านข้อความจากไฟล์นั้น
ในกรณีที่กำหนดมันจะพยายามอ่านจากไฟล์who's out there
และไม่พบมัน โปรดทราบว่าการอ่านจากไฟล์มักจะ จำกัด อยู่ที่ superuser หากคุณดำเนินการwall "who's out there"
ในฐานะผู้ใช้ที่ไม่มีสิทธิพิเศษน่าจะเป็นผลลัพธ์ที่ได้wall: will not read who's out there - use stdin.
อินพุตมาตรฐาน
หากไม่ได้รับอาร์กิวเมนต์ชื่อไฟล์ในบรรทัดคำสั่งมันจะเริ่มอ่านจากอินพุตมาตรฐาน มีหลายวิธีในการฟีดข้อมูลไปยังอินพุตมาตรฐานของคำสั่ง หนึ่งคือการใช้ท่อยูนิกซ์ ไพพ์ไลน์จะเชื่อมต่อเอาต์พุตมาตรฐานของคำสั่ง lefthand-side เข้ากับอินพุตมาตรฐานของคำสั่งด้านขวา:
$ echo "who's out there" | wall
อีกวิธีหนึ่งคือการใช้ที่นี่เอกสาร A here document
เป็นโครงสร้างของเชลล์ที่ส่งผ่านสตริง (จนถึงเครื่องหมายสิ้นสุดที่ระบุบนบรรทัดของตนเอง) โดยตรงไปยังอินพุตมาตรฐานของคำสั่งโดยไม่มีขั้นตอนกลางของการมีคำสั่งที่ชัดเจนสร้างเอาต์พุตนั้น:
$ wall << .
who's out there?
.
นี่จะเป็น "การใช้เอกสารไร้ประโยชน์ที่นี่" โดยค่าเริ่มต้นเทอร์มินัลเองจะเชื่อมต่อกับwall
อินพุตมาตรฐานและwall
จะเริ่มอ่านจากมันจนกว่าจะได้รับอักขระสิ้นสุดไฟล์ ( Ctrl+D):
$ wall
who's out there?
^D
ตามที่อุดมไปด้วย Homolkaสังเกตเห็นในความคิดเห็นเปลือกบางสนับสนุนhere strings
ซึ่งอนุญาตให้ผ่านสตริงตัวอักษรโดยไม่ต้องคำสั่งหรือเครื่องหมายสิ้นสุด:
$ wall <<< "who's out there?"
ทั้งหมดป้อนบางสิ่งบางอย่างให้wall
เป็นอินพุตมาตรฐาน ความแตกต่างคือไพพ์ไลน์เชื่อมต่อเอาต์พุตของคำสั่งอื่นไปยังมันในขณะที่here documents
และhere strings
ส่งผ่านสตริงโดยตรง ข้อได้เปรียบที่สองของที่นี่คือความสวยงามเนื่องจากecho
คำสั่งจากตัวอย่างไปป์เป็นคำสั่งในตัวของเชลล์ดังนั้นมันจะเป็นเชลล์ที่ให้wall
อินพุตในทุกกรณี
echo xxx | yyy
ไวยากรณ์ซึ่งฉันพบ cludgywall <<<'your message'