Perché molti comandi forniscono un'opzione "silenziosa"?


37

Perché molti comandi forniscono l'opzione -qo --quietper sopprimere l'output quando è possibile ottenere facilmente la stessa cosa reindirizzando l'output standard sul file null?


3
Lo considero principalmente come una bandiera di convenienza.
Janis,

7
Non tutti i comandi utilizzano -qper sopprimere tutto l' output. Ad esempio, Docker ha un comando per elencare le immagini; docker imagesmostra una tabella formattata con un mucchio di informazioni, mentre docker images -qgenera un semplice elenco di ID immagine (utile per il piping ad altri comandi).
nuovo123456

Risposte:


71
  • Mentre puoi facilmente reindirizzare in una shell, ci sono altri contesti in cui non è così facile, come quando si esegue il comando in un'altra lingua senza usare una riga di comando della shell. Anche in una shell:

    find . -type f -exec grep -q foo {} \; -printf '%s\n'

    per stampare la dimensione di tutti i file che contengono foo. Se reindirizzi a /dev/null, perdi entrambi finde l' grepoutput. Dovresti ricorrere a -exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \;(cioè generare una shell extra).

  • grep -q foo è più breve da digitare di grep foo > /dev/null
  • Il reindirizzamento /dev/nullsignifica che l'output è ancora scritto e quindi scartato, è meno efficiente rispetto al non scriverlo (e non allocare, preparare quell'output da scrivere)
  • ciò consente ulteriori ottimizzazioni. Nel caso grepad esempio, poiché con -q, grepsa che l'output non è richiesto, esce non appena trova la prima corrispondenza. Con grep > /dev/null, proverebbe comunque a trovare tutte le partite.
  • silenzio non significa necessariamente silenzio . Per alcuni comandi, significa ridurre la verbosità (l'opposto di -v|--verbose). Ad esempio, mplayerha a --quiete a --really-quiet. Con alcuni comandi, è possibile utilizzare -qqqper ridurre la verbosità 3 volte.

È interessante notare che nella greppagina man entrambe le opzioni -q, e -s, sono suggerite da evitare se la portabilità è un problema. grepL'uscita anticipata è un'importante ottimizzazione, ma non tutti i programmi con tali opzioni possono farlo; curl -selaborerà comunque tutti i dati (ma si applica ancora il terzo punto, risparmiando così tempo di elaborazione).
Janis

6
@Janis, sarebbe portabilità a sistemi molto vecchi. Entrambi -qe -ssono specificati da POSIX. Se siamo a considerare i sistemi di quel vecchio, allora la mia sh -c '...' sh {} \;volontà non funziona neanche (con precedenza kshbasata su shs).
Stéphane Chazelas,

La pagina man menziona: anche a grep in stile USG mancava -q ma la sua opzione -s si comportava come grep GNU. - Pensavo che la differenza di comportamento potesse essere un problema. Non posso giudicare dalla sua rilevanza.
Janis,

Uso frequentemente le opzioni -q e --quiet quando mi interessa solo il codice di ritorno di un comando in uno script. I motivi indicati sopra sono esempi ancora migliori del perché.
Mark Stewart,

@ StéphaneChazelas: rimarrai stupito dal fatto che (parti di) molti sistemi siano ancora così vecchi ... (beh, in realtà, non così tanti ^^ ma ce ne sono ancora alcuni)
Olivier Dulac,

3

Permette comunque che il comando venga emesso quando sente che ha bisogno di una nota sullo schermo ma normalmente non emette nulla. con il reindirizzamento di tutto su null non è possibile visualizzare l'output.


Bene, silenzio significa che non è prevista alcuna risposta; sarebbe inaspettato se vedessimo comunque l'output. (Nel caso in cui ci sia comunque qualcosa di "davvero molto veramente importante" per stampare (in un processo collegato a un terminale) un dispositivo tty / pty potrebbe essere usato direttamente dal processo. Un esempio potrebbe essere la richiesta interattiva di una password, o qualcosa del genere. )
Janis

2

Anche se probabilmente dipende dal comando, -qdisabiliterebbe anche l'output astderr . Ciò consente alle shell che non consentono facilmente di duplicare stderr su stdout (ti sto guardando, cshe tcsh) per evitare il rumore.

Alcuni programmi forniscono un'opzione "silenziosa" per situazioni in cui potrebbe avere un altro output significativo che non si desidera ingombra di messaggi di stato. L' -qequivalente o renderebbe silenzioso tutto l'output dello stato del programma, consentendo un flusso di dati puro da, diciamo, taro gzip.


0

Oltre a tutte le buone risposte e i punti sopra. È consigliabile fornire un'opzione opposta per ogni bandiera. Quindi, se esiste una -v per la verbosità, dovrebbe esserci -q per la non-verbosità, il silenzio o il silenzio. (Questo non è il punto di discussione, ma ...) Come dovrebbe essere una lunga opzione per ogni breve, -q e --quite.

Come in quasi tutto nella nostra attività, ci sono molti modi per ottenere una soluzione o gli stessi risultati. Avere -q è uno di questi.

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.