2011-04-27 13 views
8

¿Alguien me puede decir la diferencia? por ejemplo:
si tengo un archivo a.txt con el siguiente contenido:diferencia entre canalización y redirección en linux

un
b
c

lo que sería la diferencia entre cat a.txt | cat y cat < a.txt
Me parece que todos simulan STDIN, ¿es correcto o hay diferencias? Muchas gracias.

+2

Votando para cambiar a Superusuario, esta no es una pregunta de programación. – unwind

+1

@unwind uh..yeah es. Bash es un lenguaje de programación. Esto es programación, a un alto nivel. –

+2

La pregunta existe aquí (donde es más adecuada): http://askubuntu.com/questions/172982/what-is-the-difference-between-redirection-and-pipe –

Respuesta

11

La tubería funciona de un proceso a otro (cat s en el primer ejemplo), y por lo tanto requiere dos procesos cooperativos. La redirección es manejada por el propio shell. Esto puede importar al hacer cosas en el shell como working with variables.

+0

Esto es genial, gracias. – user685275

3

La redirección no "simula STDIN". Cuando redirigir, 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 un conducto 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' 
+0

lo siento, soy nuevo en esto, es posible que pueda explicar un poco sobre su programa de ejemplo, gracias. – user685275

+1

@ user685275 El programa simplemente verifica si su flujo de entrada (stdin) es un archivo normal. Si lo es, imprime "es un archivo normal". Si no, no hace nada. Cuando redirige desde un archivo, el archivo es la secuencia de entrada para el programa. Cuando canaliza desde otro proceso, el lado de lectura de la tubería es la corriente de entrada. Cuando ejecuta sin tuberías o redirecciones desde un tty, el tty es el flujo de entrada. –

+0

Gracias por responder, lo agradezco. – user685275

1

En primer lugar, dos resultados son los mismos. Nada que decir.

Para el principio de trabajo de cat a.txt | cat, el primer gato toma el argumento a.txt, luego imprime su contenido. Usted canaliza el stdout del primero al stdin del segundo. El segundo cat no encuentra ningún argumento, por lo que lee el contenido de stdin y lo imprime.

Debido a que se utiliza < en el segundo comando, el sistema reemplaza stdin de cat con flujo de archivos de a.txt. Cualquier otra cosa es igual que el segundo gato en el primer caso.