unix - comandos - sistema de archivos linux
pegar sin archivos temporales en Unix (4)
Funciona en todas las conchas.
{
progA
progB
} | paste
Intento usar el comando pegar de Unix, que es como una forma de gato que se agrega a una columna, y encontré un rompecabezas que nunca supe cómo resolver en Unix.
¿Cómo se pueden usar las salidas de dos programas diferentes como entrada para otro programa (sin usar archivos temporales)?
Idealmente, haría esto (sin usar archivos temporales):
./progA> tmpA; ./progB> tmpB; pegar tmpA tmpB
Esto parece surgir con relativa frecuencia para mí, pero no puedo descifrar cómo usar la salida de dos programas diferentes ( progA y progB ) como entrada a otra sin usar archivos temporales ( tmpA y tmpB ).
Para comandos como pegar, simplemente usar paste $ (./ progA) $ (./ progB) (en notación bash) no servirá, ya que puede leer archivos o stdin.
La razón por la que desconfío de los archivos temporales es que no quiero tener trabajos ejecutándose en paralelo para causar problemas al usar el mismo archivo; garantizar un nombre de archivo único a veces es difícil.
Actualmente estoy usando bash, pero sería curioso ver soluciones para cualquier shell de Unix.
Y lo más importante, ¿me estoy acercando al problema de la manera correcta?
¡Aclamaciones!
Holy Moly, recientemente descubrí que, en algunos casos, puedes hacer que la sustitución de tu proceso funcione si configuras lo siguiente dentro de un script bash (si es necesario):
establecer + o posix
http://www.linuxjournal.com/content/shell-process-redirection
Desde el enlace: "La sustitución de procesos no es una función compatible con POSIX y, por lo tanto, debe estar habilitada a través de: establecer + o posix" Estuve atascado durante muchas horas, hasta que lo hice. Aquí está la esperanza de que este bocado adicional ayudará.
No necesita archivos temporales bajo bash, intente esto:
paste <(./progA) <(./progB)
Consulte "Sustitución de procesos" en el manual de Bash.
Use conductos con nombre (FIFO) como este:
mkfifo fA
mkfifo fB
progA > fA &
progB > fB &
paste fA fB
rm fA fB
La sustitución del proceso de Bash hace algo similar de forma transparente, así que úsela solo si tiene un shell diferente.