O problema está na sintaxe usada no artigo vinculado. Para entender o que exatamente dá errado, vamos dar uma olhada em man wall
:
Uso de man wall
:
wall [file]
Wall displays the contents of file or, by default, its standard input
Então, wall
aceita de duas fontes para sua mensagem.
Argumento do nome do arquivo
Qualquer argumento de linha de comando dado a wall
deve ser um nome de arquivo. Como não há uma maneira confiável de dizer se o argumento serve como mensagem ou nome de arquivo, wall
assumirá que é o último, ignore qualquer coisa que apareça em padrão , e tente ler a mensagem desse arquivo.
No caso dado, ele tenta ler o arquivo who's out there
e não o encontra. Observe que a leitura de um arquivo geralmente é restrita ao superusuário. Se você tivesse executado wall "who's out there"
como um usuário não privilegiado, provavelmente sua saída teria sido, wall: will not read who's out there - use stdin.
Entrada padrão
Se não obtiver um argumento de nome de arquivo em sua linha de comando, ele começará a ler a partir da entrada padrão. Existem várias maneiras de alimentar informações para a entrada padrão de um comando. Uma é usar um tubo UNIX . Um pipeline conectará a saída padrão de seu comando do lado esquerdo à entrada padrão de seu comando no lado direito:
$ echo "who's out there" | wall
Outra maneira é usar um documento aqui . Um here document
é uma construção de shell que passa uma string (até um marcador final especificado em uma linha própria) diretamente para a entrada padrão de um comando, sem que a etapa intermediária de ter um comando distinto produza essa saída:
$ wall << .
who's out there?
.
Isso seria um "uso inútil dos documentos aqui", porque por padrão o próprio terminal será conectado à entrada padrão de wall
e wall
começará a ler a partir dele até receber um fim de arquivo caractere ( Ctrl + D ):
$ wall
who's out there?
^D
Como Rich Homolka observado nos comentários, alguns shells suportam here strings
, o que permite passar uma string literal sem comando ou fim marcadores:
$ wall <<< "who's out there?"
Todos alimentam algo na entrada padrão de wall
. A diferença é que um pipeline conecta a saída de outro comando a ele, enquanto here documents
e here strings
transmitem a sequência diretamente. A vantagem dos dois últimos aqui é estética, pois o comando echo
do exemplo pipe é um comando interno do shell, portanto, será o shell que fornece a entrada wall
em todos os casos.