To dlatego, że wget używa stderr do niektórych swoich danych wyjściowych. Drugi powinien działać.
theotherreceive
2
Nawiasem mówiąc, możesz zapisać to wyjście wget w pliku dziennika, więc kiedy / jeśli pobieranie przestanie działać, możesz dowiedzieć się, dlaczego. Jeśli i tak jest w skrypcie. Jeśli jest to jednorazowy bieg, to tak, do kosza
Matt Simmons,
1
Dla wgetmożna użyć -qopcji, aby go uciszyć.
pkhamre
Jakikolwiek sposób na tłumienie danych wyjściowych zapisanych bezpośrednio w / dev / tty?
d11wtq
30
W wierszu poleceń dostępne są trzy urządzenia IO.
standard in - 0
standard out - 1
standard error - 2
Aby przekierować standardowe wyjście (domyślne wyjście) do pliku (i zastąpić plik), użyj
command > file.log
Aby dołączyć do pliku file.log, użyj 2> s
command >> file.log
aby przekierować standardowy błąd do pliku.log, użyj
command 2> file.log
i dołączyć
command 2>> file.log
Aby połączyć wyniki w jeden strumień i wysłać je wszystkie w jedno miejsce
command > file.log 2>&1
To wysyła 2 (stderr) do 1 (stdout) i wysyła stdout do pliku.log
Zauważ, że można również przekierować standard na polecenie oczekujące standardowego wejścia
Czy ktoś może wyjaśnić, jak command > file.log 2>&1działa?
Cory Klein
Jak niski poziom chciałbyś wiedzieć?
Matt Simmons
3
@nomoreink: w rzeczywistości są to 2 polecenia, jedno jest, > filea drugie jest 2>&1. Pierwszy przekierowuje standard do pliku. Drugi pobiera drugi deskryptor pliku i przekierowuje go do pierwszego. Możesz zrobić odwrotną, przekierować standardowe wyjście do standardowego błędu za pomocą, >&2a następnie przekierować standardowy błąd do pliku za pomocą 2> file.
Hubert Kario
12
Ukryć stdout
./command >/dev/null
Ukryj stdoutistderr
./command >/dev/null 2>&1
Ukryj stdouti stderrzwolnij terminal (uruchom polecenie w tle)
Spowoduje to przekierowanie danych wyjściowych do pliku o nazwie null
thererereive
Wygenerował plik zerowy
Jader Dias,
1
nie miałbyś na myśli / dev / null, prawda?
Babu
1
Tak, chciałbym, Babu. Miałem na myśli $ command &> / dev / null. Przepraszam za zbyt szybkie pisanie dla własnego dobra.
Lucho
2
W systemie Mac OS X (10.6 „Snow Leopard”):
Jeśli chcesz ukryć dane wyjściowe, nie informując o tym programu, sprawdzając deskryptor pliku wyjściowego / błędu, możesz spróbować użyć następujących poleceń w powłoce:
stty flusho; command ;stty -flusho
lub jeśli po prostu chcesz ukryć dane wejściowe z terminala:
stty -echo; command ;stty echo
Więcej informacji znajduje się na stronie instrukcji stty (1)
W przypadku Linuksa wiem tylko, że Ubunutu (10.04 „Lucid”) i niektóre „Debian / Arch” (komentowane poniżej - tnx hendry) nie mają tego flushoustawienia (i nie widzę nic innego odpowiedniego na stronie podręcznika man) . Mimo to echoustawienie działa na Ubuntu.
Odpowiedzi:
Możesz przekierować wyjście dowolnego programu, aby nie było widoczne.
Spowoduje to przekierowanie standardowego wyjścia - nadal będziesz widzieć błędy
Spowoduje to przekierowanie wszystkich danych wyjściowych, w tym błędów.
źródło
wget
można użyć-q
opcji, aby go uciszyć.W wierszu poleceń dostępne są trzy urządzenia IO.
Aby przekierować standardowe wyjście (domyślne wyjście) do pliku (i zastąpić plik), użyj
Aby dołączyć do pliku file.log, użyj 2> s
aby przekierować standardowy błąd do pliku.log, użyj
i dołączyć
Aby połączyć wyniki w jeden strumień i wysłać je wszystkie w jedno miejsce
To wysyła 2 (stderr) do 1 (stdout) i wysyła stdout do pliku.log
Zauważ, że można również przekierować standard na polecenie oczekujące standardowego wejścia
EDYCJA
Aby uzyskać więcej informacji, zapoznaj się z przewodnikiem Advanced Bash Scripting Guide
źródło
command > file.log 2>&1
działa?> file
a drugie jest2>&1
. Pierwszy przekierowuje standard do pliku. Drugi pobiera drugi deskryptor pliku i przekierowuje go do pierwszego. Możesz zrobić odwrotną, przekierować standardowe wyjście do standardowego błędu za pomocą,>&2
a następnie przekierować standardowy błąd do pliku za pomocą2> file
.Ukryć
stdout
Ukryj
stdout
istderr
Ukryj
stdout
istderr
zwolnij terminal (uruchom polecenie w tle)źródło
Jeśli chcesz tylko ukryć wynik (i nie zapisywać go w pliku), możesz użyć:
Edytowane:
$ command &> / dev / null
źródło
W systemie Mac OS X (10.6 „Snow Leopard”):
Jeśli chcesz ukryć dane wyjściowe, nie informując o tym programu, sprawdzając deskryptor pliku wyjściowego / błędu, możesz spróbować użyć następujących poleceń w powłoce:
lub jeśli po prostu chcesz ukryć dane wejściowe z terminala:
Więcej informacji znajduje się na stronie instrukcji stty (1)
W przypadku Linuksa wiem tylko, że Ubunutu (10.04 „Lucid”) i niektóre „Debian / Arch” (komentowane poniżej - tnx hendry) nie mają tego
flusho
ustawienia (i nie widzę nic innego odpowiedniego na stronie podręcznika man) . Mimo toecho
ustawienie działa na Ubuntu.źródło