Di solito, dobbiamo solo passare un argomento:
echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
C'è un modo per passare due argomenti? Qualcosa di simile a
{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
Prima potrei semplicemente salvare entrambi i risultati in un file
echo abc > file1
echo xyz > file2
cat file1 file2
Ma poi potrei sovrascrivere accidentalmente un file, il che non va bene. Questo sta andando in uno script non interattivo. Fondamentalmente, ho bisogno di un modo per passare i risultati di due comandi arbitrari cat
senza scrivere su un file.
AGGIORNAMENTO: Siamo spiacenti, l'esempio maschera il problema. Mentre { echo abc ; echo xyz ; } | cat
sembra funzionare, l'output è dovuto a echo
s, non a cat
.
Un esempio migliore sarebbe quello { cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,
che non funziona come previsto.
Con
file1:
a,b
c,d
file2:
1,2
3,4
L'output previsto è:
b,1
d,3
DELIBERATO:
Usa la sostituzione del processo :cat <(command1) <(command2)
In alternativa, crea pipe nominate usando mkfifo
:
mkfifo temp1
mkfifo temp2
command1 > temp1 &
command2 > temp2 &
cat temp1 temp2
Meno elegante e più dettagliato, ma funziona bene, a patto che tu accerti che temp1 e temp2 non esistano prima.