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
strace
para ver qué está pasando.Cuando leemos de un archivo
Cuando leemos de STDIN (identificado como 0)
En el primer ejemplo, podemos ver que
cat
abrió el archivo y leer de él,blah.txt
. En el segundo podemos ver quecat
lee el contenido del archivo ablah.txt
través del descriptor de archivo STDIN, identificado como descriptor número 0.fuente
cat
generalmente se entiende mal y se usa cuando no es necesario.< filename command
.El uso inútil clásico
cat
es cuando lo usas para dar entrada a programas que son perfectamente capaces de abrir archivos directamente. Por ejemplo:Malo
Bueno
También es bueno (
<file
puede estar a ambos lados del comando)fuente
cat
.cat
incluyen (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 utilizarmore
oless
o algo por el estilo), (2)cat file1 file2 file3 > all_data
( exactamente para quécat
sirve), (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-cmd
está leyendo el contenido desomefile
una tubería que se alimenta de lacat
cual él mismo lo leesomefile
.some-cmd
puede 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