El problema radica en la sintaxis utilizada en el artículo vinculado. Para comprender qué es exactamente lo que falla, echemos un vistazo a man wall
:
Uso de man wall
:
wall [file]
Wall displays the contents of file or, by default, its standard input
Así que wall
acepta cualquiera de dos fuentes para su mensaje.
Argumento de nombre de archivo
Cualquier argumento de línea de comando dado a wall
tiene que ser un nombre de archivo. Como no hay una manera confiable de saber si el argumento es un mensaje o un nombre de archivo, wall
asumirá que es lo último, ignorará todo lo que ingrese en la entrada estándar e intentará leer el mensaje de ese archivo.
En el caso dado, intenta leer del archivo who's out there
y no lo encuentra. Tenga en cuenta que la lectura de un archivo generalmente está restringida al superusuario. Si hubieras ejecutado wall "who's out there"
como usuario sin privilegios, probablemente su resultado habría sido, wall: will not read who's out there - use stdin.
Entrada estándar
Si no obtiene un argumento de nombre de archivo en su línea de comando, comenzará a leer desde la entrada estándar. Hay varias formas de enviar información a la entrada estándar de un comando. Una es usar una tubería UNIX. Una canalización conectará la salida estándar de su comando del lado izquierdo a la entrada estándar de su comando del lado derecho:
$ echo "who's out there" | wall
Otra forma es usar un documento aquí. Un here document
es una construcción de shell que pasa una cadena (hasta un marcador final especificado en una línea propia) directamente a la entrada estándar de un comando, sin el paso intermedio de tener un comando distinto que produzca esa salida:
$ wall << .
who's out there?
.
Esto sería un "uso inútil de los documentos aquí", porque por defecto el propio terminal estará conectado a wall
Entrada estándar de y wall
comenzará a leerlo hasta que reciba un carácter de fin de archivo (Ctrl+D ):
$ wall
who's out there?
^D
Como señaló Rich Homolka en los comentarios, algunos shells admiten here strings
que permiten pasar una cadena literal sin comandos ni marcadores finales:
$ wall <<< "who's out there?"
Todos alimentan algo a wall
entrada estándar de . La diferencia es que una canalización conecta la salida de otro comando, mientras que here documents
y here strings
pasar la cadena directamente. La ventaja de los dos últimos aquí es estética, ya que el echo
El comando del ejemplo de canalización es un comando integrado de shell, por lo que será el shell que proporcione wall
la entrada de en todos los casos.