Pozwala podzielić oświadczenie >> /dev/null 2>&1
na części:
Część 1:>>
wyjście przekierowania
ta służy do przekierowywania wyjścia programu i załącza wyjście na końcu pliku. More...
Część 2:/dev/null
specjalny plik
To Pseudo-devices special file.
poleceń ls -l /dev/null
daje szczegóły tego pliku:
crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null
Czy obserwowany crw
? Co oznacza, że jest to plik pseudo-urządzenia, który jest typu character-special-file, który zapewnia dostęp szeregowy.
/dev/null
accepts and discards all input; produces no output (always returns an end-of-file indication on a read). Reference: Wikipedia
Część 3:2>&1
plik deskryptora
Gdy wykonuje program domyślnie system operacyjny open trzy pliki STDIN
, STDOUT
i STDERR
jak wiemy, gdy plik jest otwarty system zwraca małą liczbę całkowitą nazwaną jako deskryptor pliku . Deskryptor pliku dla tych plików wynosi odpowiednio 0, 1, 2.
Więc 2>&1
mówi po prostu przekierować STDERR
do STDOUT
&
means whatever follows is a file descriptor, not a filename.
W skrócie, za pomocą tego polecenia mówisz swój program, by nie krzyknąć podczas wykonywania.
Jakie jest znaczenie wykorzystania 2>&1
?
Jeśli nie chcesz produkować żadnych wyników, nawet w przypadku błędu w terminalu. Aby wyjaśnić Weźmy następujący przykład:
$ ls -l > /dev/null
Na powyższym poleceniu nie ma wyjścia został wydrukowany w terminalu, ale co jeśli to polecenie powoduje błąd:
$ ls -l file_doesnot_exists > /dev/null
ls: cannot access file_doesnot_exists: No such file or directory
chociaż jestem przekierowanie wyjścia do /dev/null
to jest drukowane na terminalu.To dlatego, że nie są przekierowanie wyjścia błędzie /dev/null
tak, aby przekierować wyjście błędów, jak również jest to wymagane, aby dodać 2>&1
$ ls -l file_doesnot_exists > /dev/null 2>&1
FYI: A krótszą drogę wyciszanie proces jest '> & - 2> & - '. – Zaz
@ Jos: dlaczego sprawiają, że rzeczy są jeszcze bardziej zagadkowe, niż są już? – endolith
@Josh To zamyka odpowiednie FD, co może spowodować przerwanie programów. – glglgl