Il problema risiede nella sintassi utilizzata nell'articolo collegato. Per capire cosa non va esattamente, 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 una delle due fonti per il suo messaggio.
Argomento nome file
Qualsiasi argomento della riga di comando fornito wall
deve essere un nome file. Poiché non esiste un modo affidabile per capire se l'argomento è inteso come messaggio o nome del file, wall
supporrà che sia l'ultimo, ignora qualsiasi cosa arrivi sull'input standard e prova a leggere il messaggio da quel file.
Nel caso specifico, prova a leggere dal file who's out there
e non lo trova. Si noti che la lettura da un file è in genere limitata al superutente. Se tu fossi stato 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.
Input standard
Se non ottiene un argomento relativo al nome del file sulla sua riga di comando, inizierà la lettura 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 sul lato sinistro all'input standard del suo comando sul lato destro:
$ echo "who's out there" | wall
Un altro modo è utilizzare un documento qui . A here document
è un costrutto shell che passa una stringa (fino a un marcatore finale 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à collegato wall
all'input standard e wall
inizierà a leggere da esso fino a quando non riceverà un carattere di fine file ( Ctrl+D):
$ wall
who's out there?
^D
Come ha osservato Rich Homolka nei commenti, alcune shell supportano here strings
che consentono il passaggio di una stringa letterale senza comando o marker di fine:
$ wall <<< "who's out there?"
Tutti forniscono qualcosa wall
all'input standard. La differenza è che un oleodotto collega l'uscita di un altro comando ad esso, mentre here documents
e here strings
passare direttamente la stringa. Il vantaggio di questi ultimi due qui è estetico, in quanto il echo
comando dell'esempio pipe è un comando incorporato della shell, quindi sarà l' wall
input della shell a fornire in tutti i casi.
echo xxx | yyy
sintassi, che trovo cludgywall <<<'your message'