Chciałbym krótko objaśnić następującą linię poleceń:
grep -i 'abc' content 2>/dev/null
command-line
bash
redirect
stdout
Naiwny
źródło
źródło
> /dev/null 2>&1
i&> /dev/null
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:
Uruchom
command
w tle, odrzućstdout
istderr
Uruchom
command
i dołącz stdout i stderr do pliku dziennika.W Bash 4+ funkcjonuje krótsza (ale mniej czytelna) forma
źródło
> /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
: gdziefn
jest numer pliku (zazwyczaj 0-2, niektóre programy definiują więcej liczb) itarget
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:
Nie próbuj kończyć kolejnym ukośnikiem takim jak ten -
2>/dev/null/
(to nie jest katalog).źródło
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ć.źródło