Escuché sobre el "uso inútil del gato" y encontré algunas sugerencias, pero lo siguiente no muestra nada en mi shell bash.
< filename
Sin embargo, usar cat funciona como se esperaba.
cat filename
Estoy usando Fedora Core 18 y GNU bash, versión 4.2.45 (1).
EDITAR: Usarlo delante de una tubería tampoco funciona.
< filename | grep pattern
Mientras que usar cat funciona como se esperaba.
cat filename | grep pattern
EDIT2: para aclarar, sé que puedo usar esto
grep pattern < filename
pero leí aquí /programming/11710552/useless-use-of-cat que también puedo usar delante del comando. Sin embargo, no funciona delante del comando.
bash
shell
io-redirection
cat
error
fuente
fuente

Respuestas:
El símbolo menor que y (
<) abre el archivo y lo adjunta al controlador de dispositivo de entrada estándar de alguna aplicación / programa. Pero no le ha dado al shell ninguna aplicación para adjuntar la entrada.Ejemplo
Estos 2 ejemplos hacen esencialmente lo mismo, pero obtienen su entrada de 2 maneras ligeramente diferentes.
abre archivo
abre STDIN
Mirando detrás de la cortina
Puedes usar
stracepara ver qué está pasando.Cuando leemos de un archivo
Cuando leemos de STDIN (identificado como 0)
En el primer ejemplo, podemos ver que
catabrió el archivo y leer de él,blah.txt. En el segundo podemos ver quecatlee el contenido del archivo ablah.txttravés del descriptor de archivo STDIN, identificado como descriptor número 0.fuente
catgeneralmente se entiende mal y se usa cuando no es necesario.< filename command.El uso inútil clásico
cates cuando lo usas para dar entrada a programas que son perfectamente capaces de abrir archivos directamente. Por ejemplo:Malo
Bueno
También es bueno (
<filepuede estar a ambos lados del comando)fuente
cat.catincluyen (1)cat file(con salida a la pantalla / terminal; aunque, si el archivo es más largo que la pantalla es alta, es posible que prefiera utilizarmoreolesso algo por el estilo), (2)cat file1 file2 file3 > all_data( exactamente para quécatsirve), (3)cat f1 f2 f3 | tr …(o canalizar a cualquier otro programa al que no desee pasar los archivos directamente; por ejemplo,wc(por ejemplo, si desea ver el total general solamente) ogrep(p. ej., si tiene una versión anterior que no es compatible-h, es decir,--no-filename)) ... (Cont.)cat -n file | sort … -k1 | sed 's/^ *[0-9]*\t//', (5)sudo cat file600 | untrusted_program(es decir, usted (su UID) no puede leer el archivo y no desea ejecutar el programa como root o incluso cualquier UID semi-privilegiado). Además, ( e ) (es decir, un número entre 2 y 3)program_that_generates_html | cat static_html_header - static_html_footer(que probablemente desee redirigir a un archivo o una tubería).El UUOC está en:
o
Allí,
some-cmdestá leyendo el contenido desomefileuna tubería que se alimenta de lacatcual él mismo lo leesomefile.some-cmdpuede leer directamente desdesomefile(después de que el shell lo haya abierto en stdin), no hay necesidad decat:o
(las redirecciones pueden aparecer en cualquier lugar en una línea de comando simple).
fuente