Habituellement, nous n'avons qu'à passer un argument:
echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
Existe-t-il un moyen de passer deux arguments? Quelque chose comme
{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
Je pourrais tout d'abord stocker les deux résultats dans un fichier
echo abc > file1
echo xyz > file2
cat file1 file2
Mais alors je pourrais accidentellement écraser un fichier, ce qui n'est pas correct. Cela entre dans un script non interactif. Fondamentalement, j'ai besoin d'un moyen de transmettre les résultats de deux commandes arbitraires à cat
sans écrire dans un fichier.
MISE À JOUR: Désolé, l'exemple masque le problème. Bien que { echo abc ; echo xyz ; } | cat
cela semble fonctionner, la sortie est due au echo
s, pas au cat
.
Un meilleur exemple serait celui { cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,
qui ne fonctionne pas comme prévu.
Avec
file1:
a,b
c,d
file2:
1,2
3,4
La sortie attendue est:
b,1
d,3
RÉSOLU:
Utilisez la substitution de processus :cat <(command1) <(command2)
Vous pouvez également créer des canaux nommés à l'aide de mkfifo
:
mkfifo temp1
mkfifo temp2
command1 > temp1 &
command2 > temp2 &
cat temp1 temp2
Moins élégant et plus verbeux, mais fonctionne très bien, tant que vous vous assurez que temp1 et temp2 n'existent pas au préalable.