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 teepolecenie zrobi to, co chcesz.
Kluczem jest użycie
>( )
do podstawienia procesu . Przy teeużyciu następującego wzoru:
tee >(proc1) >(proc2) >(proc3) | proc4
Więc jeśli chcesz użyć danych wyjściowych lsjako danych wejściowych do dwóch różnych grepprogramów, zapisz dane wyjściowe każdego z nich grepdo 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 -Abędą „przesyłane” do obu greps. Plik hidden-filesbędzie miał zawartość z wyjścia pierwszego grepi normal-filesbędzie miał wyniki drugiego grep. Wszystkie pliki zostaną wyświetlone na stronie EDIT : co widać less.lessto dokładnie taki sam wyjściowy z ls -A, a nie wynikiem greps. Jeśli chcesz zmodyfikować dane wyjściowe z ls -Ana 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/nulltego wyjście greps byłoby dołączone do wyjścia ls -Azamiast 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.”.