Jak przekierować dane wyjściowe aplikacji w tle do / dev / null

100

Chciałbym przekierować dane wyjściowe wygenerowane z aplikacji działającej w tle w systemie Linux do / dev / null.

Używam edytora tekstu Kate i wyświetla on wszystkie komunikaty debugowania na terminalu, które chciałbym przekierować do / dev / null.

Masz pomysł, jak to zrobić?

Dzięki

Kiran
źródło
Zajrzyj na tę stronę. xaprb.com/blog/2006/06/06/what-does-devnull-21-mean
richard.g

Odpowiedzi:

230

Używasz:

yourcommand  > /dev/null 2>&1

Jeśli powinien działać w tle, dodaj plik &

yourcommand > /dev/null 2>&1 &

>/dev/null 2>&1oznacza przekierowanie stdoutdo /dev/nullAND stderrdo miejsca, które stdoutwskazuje w tym czasie

Jeśli chcesz stderrwystępować na konsoli i stdoutprzechodzisz tylko do /dev/null, możesz użyć:

yourcommand 2>&1 > /dev/null

W tym przypadku stderrjest przekierowywany do stdout(np konsola), a potem oryginału stdoutjest przekierowywany do/dev/null

Jeśli program nie powinien się zakończyć, możesz użyć:

nohup yourcommand &

Bez żadnego parametru wszystkie wyjścia lądują w nohup.out

martwe zło
źródło
oba działają, ale jest niewielka różnica, ale nie pamiętaj
evildead
ah ok, dostałem to i dodałem inną wersję
evildead
Jeśli jest to ostatnie polecenie w pliku bash, zauważyłem, że opuszcza konsolę poleceń, która wywołała plik, bez zachęty.
Dennis
@elig przekierowanie wyjścia już uruchomionej aplikacji nie jest możliwe imo, a przynajmniej nie jest tak łatwe, ponieważ przekierowanie przez dup2()następuje bezpośrednio po, fork()ale przed exec*(). Po exec*()wykonaniu programu powłoka nie ma możliwości przekierowania wyjścia tego procesu. Popraw mnie, jeśli się mylę, ale nie wiem o powłoce, która zaimplementowała taką funkcjonalność.
evildead
3

Będą one również przekierowywać zarówno:

yourcommand  &> /dev/null

yourcommand  >& /dev/null

chociaż podręcznik basha mówi, że pierwszy jest preferowany.

Jim Hunziker
źródło