¿Por qué muchos comandos ofrecen la opción -q
o --quiet
suprimir la salida cuando puede lograr fácilmente lo mismo al redirigir la salida estándar al archivo nulo?
Si bien puede redirigir fácilmente en un shell, hay otros contextos en los que no es tan fácil, como cuando se ejecuta el comando en otro idioma sin usar una línea de comandos de shell. Incluso en una concha:
find . -type f -exec grep -q foo {} \; -printf '%s\n'
para imprimir el tamaño de todos los archivos que contienen foo
. Si redirige a /dev/null
, pierde ambos find
y la grep
salida. Tendría que recurrir a -exec sh -c 'exec grep foo "$1" > /dev/null' sh {} \;
(es decir, generar un caparazón adicional).
grep -q foo
es más corto de escribir que grep foo > /dev/null
/dev/null
significa que la salida aún se escribe y luego se descarta, eso es menos eficiente que no escribirla (y no asignar, preparar esa salida para que se escriba)grep
por ejemplo, dado que with -q
, grep
sabe que la salida no es necesaria, sale tan pronto como encuentra la primera coincidencia. Con grep > /dev/null
, aún trataría de encontrar todas las coincidencias.-v|--verbose
). Por ejemplo, mplayer
tiene a --quiet
y a --really-quiet
. Con algunos comandos, puede usar -qqq
para disminuir la verbosidad 3 veces.grep
página de manual se sugiere evitar ambas opciones -q
, y -s
, si la portabilidad es una preocupación. grep
La salida anticipada es una optimización importante, pero no todos los programas con tales opciones pueden hacer eso; curl -s
aún procesará todos los datos (pero el tercer punto aún se aplica, lo que ahorra tiempo de procesamiento).
-q
y -s
están especificados por POSIX. Si consideramos sistemas tan antiguos, entonces mi sh -c '...' sh {} \;
tampoco funcionará (con s ksh
basados en versiones anteriores sh
).
Todavía permite que el comando se apague cuando sienta que necesita una nota en la pantalla, pero normalmente no saca nada. con la redirección de todo a nulo no hay posibilidad de que se vea la salida.
Aunque probablemente depende del comando, -q
también deshabilitaría la salida a stderr
. Esto permite que los proyectiles que no permiten fácilmente duplicar stderr stdr (te estoy mirando, csh
& tcsh
) eviten el ruido.
Algunos programas ofrecen una opción "silenciosa" para situaciones en las que puede tener otro resultado significativo que no desea que esté lleno de mensajes de estado. El -q
o equivalente silenciaría toda la salida del estado del programa, permitiendo un flujo de datos puro desde, digamos, tar
o gzip
.
Además de todas las buenas respuestas y puntos anteriores. Es una buena práctica proporcionar una opción opuesta para cada bandera. Entonces, si hay una -v para verbosidad, debería haber -q para no verbosidad, silencio o silencio. (este no es el punto de discusión pero ...) Igual que debería ser una opción larga para cada corta, -q y --quite.
Como en casi todo en nuestro negocio, hay muchas maneras de obtener una solución o los mismos resultados. Tener -q es uno de ellos.
-q
para suprimir todas las salidas. Por ejemplo, Docker tiene un comando para enumerar imágenes;docker images
muestra una tabla formateada con un montón de información, mientrasdocker images -q
genera una lista simple de ID de imágenes (útil para canalizar a otros comandos).