GNU/Linux >> Belajar Linux >  >> Linux

Mengapa perintah dinding Linux tidak menyiarkan argumen string?

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.


Linux
  1. Cara menggunakan perintah grep Linux

  2. Perintah cari di Linux

  3. Batalkan perintah sampah Linux

  1. 8 tips untuk baris perintah Linux

  2. Cara menggunakan perintah history di Linux

  3. Kuasai perintah Linux ls

  1. Cara Menggunakan Perintah dinding di Linux

  2. Pengantar perintah alternatif di Linux

  3. 5 Contoh Praktis Perintah dd di Linux