GNU/Linux >> Linux Esercitazione >  >> Linux

Perché il comando Linux wall non trasmette un argomento stringa?

Il problema sta nella sintassi utilizzata nell'articolo collegato. Per capire esattamente cosa va storto, diamo un'occhiata a man wall :

Utilizzo da man wall :

wall [file]

Wall displays the contents of file or, by default, its standard input

Quindi wall accetta uno dei due di due fonti per il suo messaggio.

Argomento nome file

Qualsiasi argomento della riga di comando dato a wall deve essere un nome di file. Poiché non esiste un modo affidabile per stabilire se l'argomento è inteso come messaggio o nome file, wall presumerà che sia quest'ultimo, ignorerà tutto ciò che arriva sullo standard input e proverà a leggere il messaggio da quel file.

Nel caso specifico, tenta di leggere dal file who's out there e non lo trova. Si noti che la lettura da un file è generalmente limitata al superutente. Se avessi eseguito wall "who's out there" come utente non privilegiato, probabilmente il suo output sarebbe stato wall: will not read who's out there - use stdin.

Immissione standard

Se non ottiene un argomento del nome file sulla sua riga di comando, inizierà a leggere dall'input standard. Esistono diversi modi per fornire informazioni all'input standard di un comando. Uno è usare una pipe UNIX. Una pipeline collegherà l'output standard del suo comando di sinistra all'input standard del suo comando di destra:

$ echo "who's out there" | wall

Un altro modo è usare un here document. Un here document è un costrutto di shell che passa una stringa (fino a un indicatore di fine specificato su una riga a sé stante) direttamente all'input standard di un comando, senza che il passaggio intermedio di avere un comando distinto produca quell'output:

$ wall << .
who's out there?
.

Questo sarebbe un "uso inutile dei documenti qui", perché per impostazione predefinita il terminale stesso sarà connesso a wall input standard di e wall inizierà a leggerlo finché non riceverà un carattere di fine file (Ctrl+D ):

$ wall
who's out there?
^D

Come ha notato Rich Homolka nei commenti, alcune shell supportano here strings che consentono di passare una stringa letterale senza marcatori di comando o di fine:

$ wall <<< "who's out there?"

Tutti danno qualcosa a wall è l'input standard. La differenza è che una pipeline collega ad essa l'output di un altro comando, mentre here documents e here strings passare direttamente la stringa. Il vantaggio di questi ultimi due qui è estetico, come il echo comando dall'esempio pipe è un comando integrato nella shell, quindi sarà la shell che fornisce wall in tutti i casi.


Linux
  1. Come usare il comando Linux grep

  2. 8 suggerimenti per la riga di comando di Linux

  3. Come usare il comando cronologia in Linux

  4. Introduzione al comando alternatives in Linux

  5. Il comando locate in Linux

Il comando timer in Linux

Il comando curl di Linux

Esempi essenziali del comando ps in Linux

Qual è il comando kill in Linux?

Comprendere il comando dell'ora in Linux

Uso del comando grep in Linux