¿Qué hace un <desnudo?


10

bash no parece quejarse si ejecuta un comando como

$ < some-file-that-exists

Nada parece suceder.

También podrías usar

$ <<<"any string"

e incluso la sustitución de procesos.

Entonces, ¿qué hace exactamente esto y por qué está permitido? ¿Podría ser útil para algo?


Por cierto: para el gran ZSH, "<foobar" es lo mismo que "less foobar", ya que tu foobar de redireccionamiento al shell. Creo que este es un comportamiento bastante intuitivo. Un desnudo <le dará un error ( zsh: parse error near `\n') ya que no se da ningún argumento.
matemáticas

@math obtendrá un error similar bash, pero eso es interesante less.
Píldoras de explosión

Respuestas:


20

<configura la redirección para un comando que puede ocurrir antes o después de las instrucciones de redirección. Es decir

$ < file wc

funciona tan bien como

$ wc < file

Pero si no das un comando, bash configura la redirección y no hace nada más. Para la redirección de entrada, esto equivale a lo que vio, nada, si el archivo existe y es legible. Si el archivo no existe o no es legible, bash indicará un error. Para la redirección de salida, el archivo de salida se creará si no existe. Cualquier archivo de salida existente se truncará si >se usa; sin truncamiento si >>se usa.


en otras palabras, son existe una concisa y crean
trinquete monstruo

@Kyle Jones Creo que no coinciden los dos operadores en la última oración.
jamesbtate

@Puddingfox Gracias. He editado la frase final al final para aclarar.
Kyle Jones el

¿Hay alguna razón para usar < file wcvs. wc < file?
Píldoras de explosión

1
@tandu Es útil cuando se utilizan shells interactivos. Supongamos que tiene un comando que utiliza la redirección y desea repetirlo con un último argumento diferente. Si la redirección está al comienzo de la línea, es fácil escribir control-P y luego editar el último argumento sin tener que saltear el lenguaje "<foo> bar 2> & 1" como lo haría si estuviera al final. Más allá de eso, no he encontrado uso para eso.
Kyle Jones el

5

<lee de stdin por defecto, o un archivo. su expresión no hace nada con la entrada porque no hizo nada después de leer.

si al final termina el archivo de salida <some-file-that-exist>, verá que acaba de leer el contenido del primer archivo y lo escribió en el segundo archivo.

<<< está aquí en formato doc, por lo que se lee desde una cadena en lugar de un archivo. gato <<< "cualquier cadena" para ver lo que has leído.


2
para referencia futura, edite su respuesta para agregar detalles en lugar de agregar un comentario
Nate Koppenhaver

2
"si al final finaliza el archivo de salida <algún archivo que existe>, verá que acaba de leer el contenido del primer archivo y lo escribió en el segundo". Esto está mal; sin un comando, el archivo de salida se truncará a cero bytes.
Kyle Jones
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.