Masalahnya terletak pada sintaks yang digunakan dalam artikel yang ditautkan. 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
terima salah satu dari dua sumber untuk pesannya.
Argumen nama file
Argumen baris perintah apa pun yang diberikan wall
harus berupa nama file. Karena tidak ada cara yang dapat diandalkan untuk mengetahui apakah argumen tersebut dimaksudkan sebagai pesan atau nama file, wall
akan menganggapnya sebagai yang terakhir, mengabaikan apa pun yang masuk pada input standar , dan mencoba membaca pesan dari file itu.
Dalam kasus yang diberikan, ia mencoba membaca dari file who's out there
dan tidak menemukannya. Perhatikan bahwa membaca dari file biasanya terbatas pada superuser. Jika Anda dieksekusi wall "who's out there"
sebagai pengguna yang tidak memiliki hak, kemungkinan hasilnya adalah,wall: will not read who's out there - use stdin.
Input 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 menggunakan pipa UNIX . Sebuah pipa akan menghubungkan output standar dari perintah sisi kiri dengan 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) secara langsung ke input standar dari suatu perintah, tanpa langkah menengah untuk memiliki perintah yang berbeda menghasilkan output:
$ wall << .
who's out there?
.
Ini akan menjadi "penggunaan dokumen-dokumen yang tidak berguna di sini", karena secara default terminal itu sendiri akan terhubung ke wall
input standar dan wall
akan mulai membaca darinya sampai menerima karakter akhir file ( Ctrl+D):
$ wall
who's out there?
^D
Seperti yang dikatakan Homolka Kaya dalam komentar, beberapa cangkang mendukung here strings
yang memungkinkan melewati string literal tanpa komando atau penanda akhir:
$ wall <<< "who's out there?"
Semua memberi makan sesuatu untuk wall
input standar. Perbedaannya adalah bahwa pipa menghubungkan output dari perintah lain ke sana, sementara here documents
dan here strings
meneruskan string secara langsung. Keuntungan dua yang terakhir di sini adalah yang estetis, karena echo
perintah dari contoh pipa adalah perintah bawaan shell, sehingga shell akan memberikan wall
input dalam semua kasus.
echo xxx | yyy
sintaks, yang saya temukan tidak jelaswall <<<'your message'
wall <<< string
sintaks. Cukup bagus. Bisakah kalian menjelaskan apa<<<
yang sebenarnya dilakukan (dan mengapa itu akan lebih efisien seperti kata peth)? Saya merasa aneh bahwa cmd yang memerlukan file dapat menerima string setelah<<<
. Terima kasih lagi.wall
menerimanya (dinding membaca dari stdin jika Anda tidak mau ' t tentukan file). Sebagai cara memverifikasi bahwa herestrings membuat file,$ readlink /proc/self/fd/0 <<< test
akan mencetak sesuatu seperti/tmp/sh-thd-4228536315 (deleted)
.coba dengan root
jika file Anda ada di direktori home atau coba jalur lain
sumber