Por lo general, solo necesitamos pasar un argumento:
echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
¿Hay alguna manera de pasar dos argumentos? Algo como
{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
Podría almacenar ambos resultados en un archivo primero
echo abc > file1
echo xyz > file2
cat file1 file2
Pero luego podría sobrescribir accidentalmente un archivo, lo que no está bien. Esto va en un script no interactivo. Básicamente, necesito una forma de pasar los resultados de dos comandos arbitrarios cat
sin escribir en un archivo.
ACTUALIZACIÓN: Lo siento, el ejemplo enmascara el problema. Si bien { echo abc ; echo xyz ; } | cat
parece funcionar, la salida se debe a la echo
s, no a la cat
.
Un mejor ejemplo sería el { cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,
que no funciona como se esperaba.
Con
file1:
a,b
c,d
file2:
1,2
3,4
La salida esperada es:
b,1
d,3
RESUELTO:
Usar sustitución de proceso :cat <(command1) <(command2)
Alternativamente, haga tuberías con nombre usando mkfifo
:
mkfifo temp1
mkfifo temp2
command1 > temp1 &
command2 > temp2 &
cat temp1 temp2
Menos elegante y más detallado, pero funciona bien, siempre y cuando se asegure de que temp1 y temp2 no existan de antemano.