GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué el comando wall de Linux no transmite un argumento de cadena?

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.


Linux
  1. Cómo usar el comando grep de Linux

  2. 8 consejos para la línea de comandos de Linux

  3. Cómo usar el comando de historial en Linux

  4. Domina el comando ls de Linux

  5. Introducción al comando de alternativas en Linux

El comando del temporizador en Linux

El comando curl de Linux

Ejemplos esenciales del comando ps en Linux

¿Qué es el comando matar en Linux?

Entendiendo el comando time en Linux

Uso del comando grep en Linux