diferencia entre tuberías y redirección en Linux
-
24-10-2019 - |
Pregunta
¿Alguien puede decirme la diferencia? por ejemplo:
Si tengo un archivo a.txt
Con el siguiente contenido:
a
b
C
¿Cuál sería la diferencia entre cat a.txt | cat
y cat < a.txt
Me parece que todos simulan Stdin, ¿eso es correcto o hay diferencias? Muchas gracias.
Solución
La tubería funciona de un proceso a otro (el cat
S en el primer ejemplo), y por lo tanto requiere dos procesos que cooperan. La redirección es manejada por el caparazón. Esto puede importar al hacer cosas en el caparazón, como Trabajando con variables.
Otros consejos
La redirección no "simula Stdin". Cuando redirige el archivo es el stdin para el proceso. En particular, muchos programas tienen un comportamiento diferente si la entrada es un archivo regular que si es una tubería o un TTY, por lo que puede obtener un comportamiento diferente. Por ejemplo:
$ < file perl -E 'say "is a regular file" if -f STDIN' is a regular file $ cat file | perl -E 'say "is a regular file" if -f STDIN'
En primer lugar, dos resultados son los mismos. Nada que decir.
Para el principio de trabajo de cat a.txt | cat
, el primer gato argumenta a.txt
, luego imprime su contenido. Totas el stdout
del primero en stdin
del segundo. El segundo cat
no encuentra ningún argumento para que lea contenido de stdin
, y lo imprime.
Porque usas <
En el segundo comando, el sistema reemplaza stdin
de cat
con archivo de transmisión de a.txt
. Cualquier otra cosa es la misma que el segundo gato en el primer caso.