Jak mogę potokować wyjście jednego polecenia do wejścia dwóch innych poleceń jednocześnie?
Jak mogę potokować wyjście jednego polecenia do wejścia dwóch innych poleceń jednocześnie?
Odpowiedzi:
Wygląda na to, że tee
polecenie zrobi to, co chcesz.
Kluczem jest użycie
>( )
do podstawienia procesu . Przy tee
użyciu następującego wzoru:
tee >(proc1) >(proc2) >(proc3) | proc4
Więc jeśli chcesz użyć danych wyjściowych ls
jako danych wejściowych do dwóch różnych grep
programów, zapisz dane wyjściowe każdego z nich grep
do różnych plików i prześlij wszystkie wyniki less
, spróbuj:
ls -A | tee >(grep ^[.] > hidden-files) >(grep -v ^[.] > normal-files) | less
Wyniki ls -A
będą „przesyłane” do obu grep
s. Plik hidden-files
będzie miał zawartość z wyjścia pierwszego grep
i normal-files
będzie miał wyniki drugiego grep
. Wszystkie pliki zostaną wyświetlone na stronie EDIT : co widać less
.less
to dokładnie taki sam wyjściowy z ls -A
, a nie wynikiem grep
s. Jeśli chcesz zmodyfikować dane wyjściowe z ls -A
na less
(np. Zamieniając kolejność, aby normalne pliki były wyświetlane przed plikami ukrytymi), spróbuj tego:
ls -A | tee >(grep ^[.]) >(grep -v ^[.]) >/dev/null | less
Bez >/dev/null
tego wyjście grep
s byłoby dołączone do wyjścia ls -A
zamiast go zastępować.
Użyj „tee”.
Przykład:
grep someSearchString someFile | tee /dev/tty | wc -l > grepresult
Spowoduje to wysłanie wyniku polecenia grep zarówno do terminala, jak i do wc (którego wyjście z kolei zostanie przekierowane do pliku grepresult).
„Tee” wyjaśniono w tee ( Wikipedia) w artykule w Wikipedii . Centralne to: „Polecenie tee odczytuje standardowe dane wejściowe, a następnie zapisuje ich zawartość na standardowe dane wyjściowe i jednocześnie kopiuje je do określonych plików lub zmiennych.”.