it.phhsnews.com


it.phhsnews.com / Come si esegue un comando sullo sfondo senza uscita a meno che non vi sia un errore?

Come si esegue un comando sullo sfondo senza uscita a meno che non vi sia un errore?


Se sei una persona impegnata, allora l'ultima cosa di cui hai bisogno è di essere infastidita da un enorme quantità di notifiche "inutili", quindi come calmare le cose? Il post di Q & A di SuperUser di oggi ha alcune ottime risposte per aiutare un lettore a ridurre la quantità di output.

La sessione di domande e risposte di oggi ci viene fornita per gentile concessione di SuperUser, una suddivisione di Stack Exchange, un raggruppamento di siti Web di domande e risposte.

La Domanda

Il lettore SuperUser Xster vuole sapere come eseguire un comando in background senza output a meno che non ci sia un errore:

Come si sopprime l'output di un comando, ma mostrarlo se i codici di uscita del comando un errore?

Come si ottiene un comando da eseguire in background senza output a meno che non ci sia un errore?

La risposta

I contributori SuperUser Bob e Maximillian Laumeister hanno la risposta per noi. Innanzitutto, Bob:

Sfortunatamente, l'ipotesi che stderr venga utilizzata solo per l'output degli errori non è sempre corretta. Piuttosto, stderr viene spesso utilizzato per tutti gli output e i test diagnostici interattivi (ovvero l'output destinato all'utente a leggere in un prompt interattivo). (1) wget e dd sono esempi noti.

Alcuni comandi forniranno un flag (es. -quiet o -silent ) per sopprimere l'output senza errori. Leggi le rispettive pagine man per vedere se ne esiste una.

Un'altra convenzione che contiene più spesso è il codice di uscita , un programma restituisce un codice di uscita quando esce. In genere (2) , un codice di uscita 0 indica il successo e qualsiasi altro codice di uscita indica un errore.

Con bash , è possibile ottenere il codice di uscita dell'ultimo comando dalla variabile $? . In pesce , utilizzare la variabile $ stato . È possibile reindirizzare stderr in un file temporaneo e stamparlo solo se si verifica un errore. Ad esempio ( pesce ):

È inoltre possibile utilizzare alcune scorciatoie se non si eseguono i comandi di concatenazione:

Oppure:

È anche possibile reindirizzare stdout allo stesso buffer usando 2> & 1> / tmp / outputbuffer .

( Nota: In realtà non so pesce , quindi sto adattando il concetto a cosa posso trovare nella sua documentazione La sintassi potrebbe essere leggermente errata Inoltre, è possibile utilizzare mktemp per generare un file temporaneo univoco, eseguirlo e registrare il nome del file in una variabile.)

Se è necessario eseguire l'intera operazione sullo sfondo di una shell che si utilizza anche in modo interattivo allo stesso tempo, quindi è meglio scrivere uno script per gestire l'output-nascondere e eseguire quello script in background con le tecniche standard ( pesce ). Diamine, puoi mettere qualcosa come la seguente funzione in ~ / .config / fish / config.fish :

Chiama con somecommand run-silent e (dove il trailing & fa in modo che venga eseguito in background)

Si noti che questo ingoierà il codice di uscita originale e scaricherà entrambi stdout e stderr in caso di un fallimento. È possibile personalizzarlo in base alle esigenze.

(1) Non è garantito che l'output dell'errore non venga visualizzato su stdout , alcuni programmi eseguiranno il dump di tutti gli output lì!

(2) Purtroppo, questo non è sempre il caso. Il codice di uscita è completamente controllato dal programma e alcuni indicano alcune condizioni di successo con uscite diverse da zero. Di nuovo, controlla il manuale.

Seguito dalla risposta di Maximillian Laumeister:

Le utility Unix inviano messaggi generali a stdout e messaggi di errore a stderr , quindi se solo noi vuoi vedere i messaggi di errore, allora sarà sufficiente sopprimere stdout in modo che solo stderr venga emesso sulla console.

Il modo per farlo (in entrambi bash e pesce ) è quello di aggiungere > / dev / null al comando. Questo pipe stdout nel nulla, ma stderr (con i tuoi messaggi di errore) arriva ancora attraverso la console.

Quindi ad esempio:

Il comando echo 1 > / dev / null non stampa nulla, perché il normale stdout l'output è soppresso e non è stato scritto nulla su stderr .

Il comando man doesnotexist> / dev / null stampa un messaggio di errore, perché man scrive il suo messaggio di errore su stderr .


Hai qualcosa da aggiungere alla spiegazione? Audio disattivato nei commenti. Vuoi leggere più risposte dagli altri utenti di Stack Exchange esperti di tecnologia? Controlla il thread completo di discussione qui.


7-Zip vs WinZip vs WinRAR vs Windows Compression

7-Zip vs WinZip vs WinRAR vs Windows Compression

Hai bisogno di comprimere un mucchio di file e vuoi sapere quale formato di compressione è il migliore? Quale programma ti darà il file più piccolo? Bene, la risposta è un po 'più complicata di così.Sì, per qualsiasi serie di dati, un programma ti darà sempre la compressione migliore e il file più piccolo, ma a seconda dei dati, potrebbe non essere lo stesso programma ogni volta.Inoltre,

(How-to)

Download di software gratuito essenziale per Windows

Download di software gratuito essenziale per Windows

Sono un grande fan del software open source perché è gratuito e di solito ha le stesse funzionalità di un'applicazione commerciale! Uno svantaggio del software open source è la mancanza di supporto, ma quel problema è solitamente costituito da forum attivi e thread di community avviati da avid followers.Ci s

(How-to)