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.

¿Fue útil?

Solución

La tubería funciona de un proceso a otro (el catS 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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top