Come reindirizzare l'output di un'applicazione in background a / dev / null


100

Vorrei reindirizzare l'output generato da un'applicazione in background in Linux a / dev / null.

Sto usando l'editor di testo kate e stampa tutti i messaggi di debug sul terminale che vorrei reindirizzare a / dev / null.

Qualche idea su come farlo?

Grazie


Risposte:


230

Usate:

yourcommand  > /dev/null 2>&1

Se deve essere eseguito in background, aggiungi un file &

yourcommand > /dev/null 2>&1 &

>/dev/null 2>&1significa reindirizzare stdouta /dev/nullAND stderral luogo in cui stdoutpunta in quel momento

Se vuoi stderrche avvenga su console e solo stdoutandando su /dev/nullpuoi usare:

yourcommand 2>&1 > /dev/null

In questo caso stderrviene reindirizzato a stdout(ad esempio la tua console) e successivamente l'originale stdoutviene reindirizzato a/dev/null

Se il programma non dovesse terminare puoi usare:

nohup yourcommand &

Senza alcun parametro tutto l'output finisce in nohup.out


sia il lavoro, ma c'è una piccola differenza, ma non ricordate
evildead

ah ok capito e ha aggiunto l'altra versione
evildead

Se questo è l'ultimo comando in un file bash, una cosa che ho notato è che lascia la console dei comandi che ha chiamato il file senza un prompt.
Dennis

@elig reindirizzare l'output di un'applicazione già in esecuzione non è possibile imo, o almeno non così facilmente, perché il reindirizzamento tramite dup2()avviene immediatamente dopo fork()ma prima exec*(). Una volta exec*()eseguito il programma, la shell non ha la capacità di reindirizzare l'output di quel processo. Correggimi se sbaglio, ma non conosco una shell che abbia implementato tale funzionalità.
Evildead

3

Questi reindirizzeranno anche entrambi:

yourcommand  &> /dev/null

yourcommand  >& /dev/null

sebbene il manuale di bash dica che il primo è preferito.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.