Zwykle musimy przekazać tylko jeden argument:
echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
Czy istnieje sposób na przekazanie dwóch argumentów? Coś jak
{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
Mógłbym najpierw zapisać oba wyniki w pliku
echo abc > file1
echo xyz > file2
cat file1 file2
Ale wtedy mogę przypadkowo zastąpić plik, co nie jest w porządku. Przechodzi w nieinteraktywny skrypt. Zasadniczo potrzebuję sposobu na przekazanie wyników dwóch dowolnych poleceń cat
bez zapisywania do pliku.
AKTUALIZACJA: Przykro nam, przykład maskuje problem. Chociaż { echo abc ; echo xyz ; } | cat
wydaje się, że działa, wynik jest spowodowany przez echo
s, a nie przez cat
.
Lepszym przykładem byłby ten, { cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,
który nie działa zgodnie z oczekiwaniami.
Z
file1:
a,b
c,d
file2:
1,2
3,4
Oczekiwany wynik to:
b,1
d,3
ZDECYDOWANY:
Użyj podstawienia procesu :cat <(command1) <(command2)
Możesz też utworzyć nazwane potoki, używając mkfifo
:
mkfifo temp1
mkfifo temp2
command1 > temp1 &
command2 > temp2 &
cat temp1 temp2
Mniej elegancki i bardziej szczegółowy, ale działa dobrze, o ile upewnisz się, że temp1 i temp2 nie istnieją wcześniej.