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.


Trova e goditi il ​​contenuto di Netflix Più veloce con Flix Plus

Trova e goditi il ​​contenuto di Netflix Più veloce con Flix Plus

Se guardi un sacco di Netflix, Flix Plus fornisce un vero e proprio coltellino svizzero di miglioramenti all'intera esperienza di navigazione e visione. Continua a leggere mentre evidenziamo la miriade di motivi per cui è folle guardare Netflix senza di essa. Che cos'è Flix Plus? Flix Plus è un'estensione di Chrome che rielabora l'esperienza del browser Netflix per creare un'esperienza più snella, fornisce personalizzazioni scorciatoie da tastiera, la possibilità di nascondere i contenuti che non ti interessano, il testo riassuntivo delle anteprime nascoste e le anteprime e le valutazioni dei filmati integrate fornite da IMDB e Rotten Tomatoes.

(how-to)

Come saltare avanti o indietro un certo numero di pagine in Word 2013

Come saltare avanti o indietro un certo numero di pagine in Word 2013

A volte potrebbe essere necessario saltare a una posizione specifica rispetto alla posizione corrente in un documento di Word. Puoi farlo facilmente usando la funzione "Vai a" per andare avanti o indietro di un numero specificato di pagine. Per accedere alla scheda "Vai a" nella finestra di dialogo "Trova e sostituisci", fai clic sulla freccia giù sulla Pulsante "Trova" nella sezione "Modifica" della scheda "Home".

(how-to)