El problema radica en la sintaxis utilizada en el artículo vinculado. Para entender qué sale mal exactamente, echemos un vistazo a man wall
:
Uso de man wall
:
wall [file]
Wall displays the contents of file or, by default, its standard input
Entonces wall
acepta cualquiera de las dos fuentes para su mensaje.
Argumento de nombre de archivo
Cualquier argumento de línea de comando dado a wall
debe ser un nombre de archivo. Como no hay una manera confiable de saber si el argumento se entiende como mensaje o nombre de archivo, wall
asumirá que es el ú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 hubiera ejecutado wall "who's out there"
como un usuario sin privilegios, probablemente su salida hubiera 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 alimentar información a la entrada estándar de un comando. Una es usar una tubería UNIX . Una tubería 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í . A 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 de manera predeterminada el terminal en sí estará conectado a wall
la entrada estándar y wall
comenzará a leer de él hasta que reciba un carácter de fin de archivo ( Ctrl+D):
$ wall
who's out there?
^D
Como Rich Homolka señaló en los comentarios, algunos shells admiten here strings
que permiten pasar una cadena literal sin comando o marcadores finales:
$ wall <<< "who's out there?"
Todos alimentan algo a wall
la entrada estándar. La diferencia es que una tubería conecta la salida de otro comando, here documents
y here strings
pasa la cadena directamente. La ventaja de los dos últimos aquí es estética, ya que el echo
comando del ejemplo de tubería es un comando incorporado de shell, por lo que será el shell que proporcione wall
la entrada en todos los casos.
echo xxx | yyy
sintaxis, lo cual me parece confusowall <<<'your message'
wall <<< string
ofrecías el sintax. Eso es genial ¿Puede alguno de ustedes explicar qué<<<
está haciendo exactamente (y por qué sería más eficiente como dijo Peth)? Me resulta extraño que un cmd que requiere un archivo pueda aceptar una cadena después<<<
. Gracias de nuevo.wall
acepta (las lecturas de pared de stdin si no lo hace ' t especificar un archivo). Como una forma de verificar que las herejías crean un archivo,$ readlink /proc/self/fd/0 <<< test
se imprimirá algo así/tmp/sh-thd-4228536315 (deleted)
.prueba con root
si su archivo está en el directorio de inicio, de lo contrario intente otra ruta
fuente