Por que muitos comandos fornecem uma opção “silenciosa”?

36

Por que muitos comandos fornecem a opção -q ou --quiet para suprimir a saída quando você pode facilmente obter a mesma coisa redirecionando a saída padrão para o arquivo nulo?

    
por August Karlstrom 19.03.2015 / 17:43

4 respostas

68
  • Embora você possa redirecionar facilmente em um shell, há outros contextos em que não é tão fácil, como ao executar o comando em outro idioma sem usar uma linha de comando do shell. Mesmo em um shell:

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

    para imprimir o tamanho de todos os arquivos que contêm foo . Se você redirecionar para /dev/null , perderá ambos find e grep output. Você precisaria recorrer a -exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \; (isto é, gerar uma casca extra).

  • grep -q foo é menor para digitar que grep foo > /dev/null
  • Redirecionar para /dev/null significa que a saída ainda está gravada e, em seguida, descartada, que é menos eficiente do que não gravá-la (e não alocar, preparar essa saída para ser gravada)
  • que permite mais otimizações. No caso de grep , por exemplo, já que com -q , grep sabe que a saída não é necessária, ela sai assim que encontrar a primeira correspondência. Com grep > /dev/null , ainda tentaria encontrar todas as correspondências.
  • quiet não significa necessariamente silencioso . Para alguns comandos, isso significa reduzir a verbosidade (o oposto de -v|--verbose ). Por exemplo, mplayer tem --quiet e --really-quiet . Com alguns comandos, você pode usar -qqq para diminuir a verbosidade 3 vezes.
por 19.03.2015 / 17:57
3

Ele ainda permite que o comando apague quando parece necessário para uma nota na tela, mas normalmente não coloca nada para fora. com o redirecionamento all para null, não há chance de a saída ser vista.

    
por 19.03.2015 / 17:49
2

Embora provavelmente dependa do comando, -q também desativaria a saída para stderr . Isso permite shells que não permitem facilmente enganar stderr para stdout (estou olhando para você, csh & tcsh ) para evitar o ruído.

Alguns programas fornecem uma opção "silenciosa" para situações em que pode haver outras saídas significativas que você não deseja que estejam cheias de mensagens de status. O -q ou equivalente silenciaria toda a saída de status do programa, permitindo um fluxo de dados puro de, digamos, tar ou gzip .

    
por 19.03.2015 / 18:16
0

Além de todas as boas respostas e pontos acima. É uma prática recomendada fornecer uma opção oposta para cada sinalizador. Então, se houver um -v para verbosidade, deve haver -q para não-verbosidade, bastante ou silêncio. (este não é o ponto de discussão, mas ...) O mesmo que deve ser uma opção longa para cada um, -q e --quite.

Como em quase tudo em nossos negócios, há muitas maneiras de obter uma solução ou os mesmos resultados. Ter -q é um deles.

    
por 25.03.2015 / 20:12

Tags