Chociaż zaakceptowana odpowiedź na to pytanie jest prawidłowa, tak naprawdę niewiele robi, aby wyjaśnić, dlaczego to działa, a ponieważ składnia nie jest od razu jasna, zrobiłem szybkie google, aby dowiedzieć się, co się właściwie dzieje. W nadziei, że informacje te będą pomocne dla innych, zamieszczam je tutaj.
Przekierowywanie komunikatów o błędach z wiersza polecenia: STDERR / STDOUT
Podsumowanie
Podczas przekierowywania danych wyjściowych z aplikacji za pomocą symbolu „>” komunikaty o błędach nadal są drukowane na ekranie. Wynika to z faktu, że komunikaty o błędach są często wysyłane do strumienia standardowego błędu zamiast strumienia standardowego.
Dane wyjściowe z aplikacji lub polecenia konsoli (wiersza polecenia) są często wysyłane do dwóch oddzielnych strumieni. Zwykłe wyjście jest wysyłane do Standard Out (STDOUT), a komunikaty o błędach są wysyłane do Standard Error (STDERR). Gdy przekierowujesz wyjście konsoli za pomocą symbolu „>”, przekierowujesz tylko STDOUT. Aby przekierować STDERR, musisz podać „2>” dla symbolu przekierowania. Wybiera drugi strumień wyjściowy, którym jest STDERR.
Przykład
Polecenie dir file.xxx
(gdzie file.xxx
nie istnieje) wyświetli następujące dane wyjściowe:
Volume in drive F is Candy Cane Volume Serial Number is 34EC-0876
File Not Found
Jeśli przekierujesz dane wyjściowe do NUL
urządzenia za pomocą dir file.xxx > nul
, nadal zobaczysz część komunikatu o błędzie, taką jak ta:
File Not Found
Aby przekierować (tylko) komunikat o błędzie NUL
, użyj następującego polecenia:
dir file.xxx 2> nul
Lub możesz przekierować dane wyjściowe do jednego miejsca, a błędy do innego.
dir file.xxx > output.msg 2> output.err
Możesz wydrukować błędy i standardowe dane wyjściowe do jednego pliku, używając polecenia „& 1” w celu przekierowania danych wyjściowych dla STDERR do STDOUT, a następnie wysyłając dane wyjściowe z STDOUT do pliku:
dir file.xxx 1> output.msg 2>&1