Normalmente una 'pipe' es algo como esto:
Using bash Syntax Highlighting
$ programa1
| programa2
Coloreado en 0.003 segundos, usando
GeSHi 1.0.8.4
De esta forma, la salida estándar del primer programa se pasa a la entrada estándar del segundo programa. Así no es necesario crear un fichero externo para intercambiar información entre los programas.
El problema aparece si, además de la salida estándar, el primer programa genera más información en otro sitio, como por ejemplo, otro fichero en el directorio.
Bueno, si el nombre de ese fichero es variable, el segundo programa no podrá localizarlo salvo que tenga algunas pistas de él... por ejemplo:
* es el último fichero creado en el directorio, por lo que solo tiene que mirar entre todos cuál es el más moderno
* si su nombre es variable, pero predecible, entonces también es fácil de encontrar si las reglas de construcción del nombre son conocidas. Es el caso de los nombres de ficheros que incorporan una fecha o un contador
Finalmente, sí que es posible que el primer programa le pase la información al segundo programa, por la misma salida-entrada estándar, siempre que el segundo programa sepa distinguir lo que recibe.
Ejemplo: el primer programa envía toda la información al segundo programa usando la tubería (
pipe), y, la última línea que le envía, es el nombre del fichero externo que ha creado. El segundo fichero sabe que tiene que procesar todo lo que recibe excepto esa última línea, que la tiene que tomar como el nombre de un fichero.
Todo es cuestión del protocolo (-ponerse de acuerdo-).