Odpowiedzi:
Operator> przekierowuje dane wyjściowe zwykle do pliku, ale może to być urządzenie. Możesz także użyć >>, aby dołączyć.
Jeśli nie podasz liczby, przyjmowany jest standardowy strumień wyjściowy, ale możesz także przekierowywać błędy
> file
przekierowuje stdout do pliku
1> file
przekierowuje stdout do pliku
2> file
przekierowuje stderr do pliku
&> file
przekierowuje stdout i stderr do pliku
/dev/null
jest zerowym urządzeniem, które pobiera dowolne dane wejściowe i wyrzuca je. Można go użyć do stłumienia dowolnego wyjścia.
2>&1
starsza składnia, więc &>
nie działałaby wiele lat temu, ale obie są równoważne.
Krótko mówiąc, przekierowuje stderr
(fd 2) do czarnej dziury (odrzuca wyjście polecenia).
Niektóre bardziej powszechne przypadki użycia przekierowania:
command > /dev/null 2>&1 &
Uruchom command
w tle, odrzuć stdout
istderr
command >> /path/to/log 2>&1 &
Uruchom command
i dołącz stdout i stderr do pliku dziennika.
W Bash 4+ funkcjonuje krótsza (ale mniej czytelna) forma
command &>> /path/to/log
> /dev/null 2>&1
zamiast &> /dev/null
?
&>
jest nowy w Bash 4, ten pierwszy to tradycyjny sposób, jestem tak przyzwyczajony (łatwy do zapamiętania).
&> /dev/null
może nie działać w niektórych powłokach, ale> / dev / null 2> i 1 będzie działać we wszystkich powłokach zgodnych z POSIX.
fn>target
: gdzie fn
jest numer pliku (zazwyczaj 0-2, niektóre programy definiują więcej liczb) i target
zwykle jest to nazwa pliku, ale tutaj jest inny numer pliku - z prefiksem, &
którym jest składnia dla „Chcę numer pliku zamiast nazwy pliku”.
/dev/null
w Linuksie / Uniksie jest traktowany jako czarna dziura, więc możesz w to wszystko włożyć, ale nie będziesz w stanie go odzyskać /dev/null
.
Ponadto 2>
oznacza, że przekierowujesz (tj. >
) Stderr (tj. 2
) Do czarnej dziury (tj. /dev/null
)
Twoje polecenie to:
grep -i 'abc' content 2>/dev/null
Nie próbuj kończyć kolejnym ukośnikiem takim jak ten - 2>/dev/null/
(to nie jest katalog).
Treść grep -i 'abc' wygeneruje dane wyjściowe wyświetlane na konsoli, w tym wszelkie błędy.
Określenie 2>/dev/null
spowoduje odfiltrowanie błędów, aby nie były one wysyłane do konsoli.
Bardziej szczegółowo: 2 oznacza deskryptor błędu, w którym zapisywane są błędy. Domyślnie są one drukowane na konsoli.
\>
przekierowuje dane wyjściowe do określonego miejsca, w tym przypadku /dev/null
/dev/null
to standardowe urządzenie Linux, do którego wysyłasz dane wyjściowe, które chcesz zignorować.
> /dev/null 2>&1
i&> /dev/null