Masalahnya terletak pada sintaks yang digunakan dalam artikel tertaut. Untuk memahami apa yang sebenarnya salah, mari kita lihat man wall
:
Penggunaan dari man wall
:
wall [file]
Wall displays the contents of file or, by default, its standard input
Jadi wall
menerima keduanya dari dua sumber untuk pesannya.
Argumen nama file
Argumen baris perintah apa pun yang diberikan ke wall
harus berupa nama file. Karena tidak ada cara yang dapat diandalkan untuk mengetahui apakah argumen dimaksudkan sebagai pesan atau nama file, wall
akan menganggap itu yang terakhir, abaikan apa pun yang masuk pada input standar, dan coba baca pesan dari file itu.
Dalam kasus tertentu, ia mencoba membaca dari file who's out there
dan tidak menemukannya. Perhatikan bahwa membaca dari file biasanya dibatasi untuk superuser. Jika Anda mengeksekusi wall "who's out there"
sebagai pengguna yang tidak memiliki hak istimewa, kemungkinan keluarannya adalah, wall: will not read who's out there - use stdin.
Masukan standar
Jika tidak mendapatkan argumen nama file pada baris perintahnya, ia akan mulai membaca dari input standar. Ada beberapa cara untuk memasukkan informasi ke input standar dari suatu perintah. Salah satunya adalah dengan menggunakan pipa UNIX. Sebuah pipeline akan menghubungkan output standar dari perintah sisi kirinya ke input standar dari perintah sisi kanannya:
$ echo "who's out there" | wall
Cara lain adalah dengan menggunakan dokumen di sini. A here document
adalah konstruksi shell yang meneruskan string (hingga penanda akhir yang ditentukan pada barisnya sendiri) langsung ke input standar dari suatu perintah, tanpa langkah perantara untuk membuat perintah yang berbeda menghasilkan output tersebut:
$ wall << .
who's out there?
.
Ini akan menjadi "penggunaan dokumen di sini yang tidak berguna", karena secara default terminal itu sendiri akan terhubung ke wall
input standar dan wall
akan mulai membacanya hingga menerima karakter akhir file (Ctrl+D ):
$ wall
who's out there?
^D
Seperti yang dicatat Rich Homolka di komentar, beberapa shell mendukung here strings
yang memungkinkan meneruskan string literal tanpa perintah atau penanda akhir:
$ wall <<< "who's out there?"
Semua beri makan sesuatu ke wall
masukan standar. Perbedaannya adalah sebuah pipeline menghubungkan output dari perintah lain ke dalamnya, sedangkan here documents
dan here strings
lewati string secara langsung. Keuntungan dua yang terakhir di sini adalah estetika, seperti echo
perintah dari contoh pipa adalah perintah bawaan shell, jadi itu akan menjadi shell yang menyediakan wall
masukan dalam semua kasus.