W chwili pisania tego tekstu składnia zaakceptowanej odpowiedzi była niepoprawna dla większości, jeśli nie wszystkich, powłok pochodzących od Bourne'a, w tym bash
. Zasugerowałem edycję na górze i zaakceptowałem odpowiedź, aby to naprawić, ale byłem również skłonny dodać te wszystkie inne informacje, a byłoby to raczej przepisanie zamiast edycji.
Możesz użyć poleceń złożonych:
{ grep ...; bzgrep ...; } >file
.. lub podpowłoki (zwróć uwagę na nawiasy zamiast nawiasów klamrowych):
(grep ...; bzgrep ...) >file
.. aby zgrupować polecenia. Sposób podpowłoki ma ładniejszą składnię (bardziej wybaczające brak białych znaków i pozwala pominąć ostatni średnik), ale albo forksuje nowy proces, albo „udaje”, że uruchamia polecenia w oczyszczonym środowisku. Oba mają zalety w zależności od tego, co chcesz zrobić, co nie ma tutaj znaczenia, ale warto spojrzeć w górę, jeśli chcesz więcej umiejętności posługiwania się powłoką.
Uwaga: z tymi sztuczkami możesz również korzystać z potokowania, dzięki czemu możesz zrobić coś takiego:
{ grep ...; bzgrep ...; } | less
PS jeśli nie dbają o uporządkowaniu meczów w swojej połączonej mocy, można użyć pojedynczego &
pomiędzy dwoma poleceniami, tak: { grep ... & bzgrep ...; }
. Następnie dwa polecenia działają jednocześnie: grep
uruchamia się, a powłoka umieszcza je w tle, a następnie powłoka uruchamia bzgrep
. (Ale jest z tym małe zastrzeżenie, z wyjaśnieniem dotyczącym przekierowania pliku i buforowania strumienia plików, które potencjalnie mogą spowodować, że bardzo mała część wierszy w pliku wyjściowym zostanie podzielona / zniekształcona: czy zobaczysz, że to zależy od tego, w jaki sposób grep
, bzgrep
, a libc
stdio.h
funkcje są zaimplementowane. W większości implementacji uważam, że przekazanie polecenia przed przekierowaniem do pliku pozwoli uniknąć problemu, więc możesz to zrobić { foo & bar; } | cat - >file
jako obejście).