es.phhsnews.com


es.phhsnews.com / ¿Cómo se ejecuta un comando en segundo plano sin salida a menos que haya un error?

¿Cómo se ejecuta un comando en segundo plano sin salida a menos que haya un error?


Si es una persona ocupada, lo último que necesita es ser molestado con un enorme cantidad de notificaciones 'inútiles', entonces, ¿cómo calmas las cosas? La publicación de preguntas y respuestas SuperUser de hoy tiene excelentes respuestas para ayudar al lector a reducir la cantidad de resultados.

La sesión de preguntas y respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, una agrupación de sitios de preguntas y respuestas.

The Question

Lector SuperUser Xster quiere saber cómo ejecutar un comando en segundo plano sin salida a menos que haya un error:

¿Cómo se suprime la salida de un comando, pero se muestra si los códigos de salida del comando? ¿un error?

¿Cómo se obtiene un comando para ejecutar en segundo plano sin salida a menos que haya un error?

Los contribuyentes de Respuesta

SuperUser Bob y Maximillian Laumeister tienen la respuesta para nosotros. Primero, Bob:

Desafortunadamente, la suposición de que stderr solo se usa para el resultado de error no siempre es correcta. Por el contrario, stderr se usa a menudo para todos y cada uno de los resultados y diagnósticos interactivos (es decir, salida prevista para que el usuario lea en un indicador interactivo). (1) wget y dd son ejemplos bien conocidos.

Algunos comandos proporcionarán un indicador (es decir, -quiet o -silent ) para suprimir la salida sin errores. Lea sus páginas man para ver si existe alguna.

Otra convención que se cumple con más frecuencia es el código de salida , un programa devuelve un código de salida cuando sale. Típicamente (2) , un código de salida de 0 indica éxito, y cualquier otro código de salida indica un error.

Con bash , puede obtener el código de salida del último comando de la variable $? . En pez , use la variable $ status . Puede conectar stderr a un archivo temporal y solo imprimirlo si se produce un error. Por ejemplo ( fish ):

También puede usar algunos accesos directos si no está encadenando comandos:

O:

También puede conectar stdout al mismo buffer usando 2> & 1> / tmp / outputbuffer .

( Nota: No sé fish , entonces estoy adaptando el concepto a lo que puedo encontrar en su documentación. La sintaxis puede ser un poco incorrecta. Además, puede usar mktemp para generar un archivo temporal único. Ejecútelo y registre el nombre del archivo en una variable.)

If necesita ejecutar todo en el fondo de un shell que también está utilizando interactivamente al mismo tiempo, entonces es mejor escribir un script para manejar el script de salida y ejecutar ese script en segundo plano con las técnicas estándar ( pez ). Diablos, puede poner algo como la siguiente función en ~ / .config / fish / config.fish :

Llamar con ejecutar un comando silencioso & (donde el final & hace que se ejecute en segundo plano)

Tenga en cuenta que esto tragará el código de salida original, y eliminará stdout y stderr en el caso de una fracaso. Puede personalizarlo según sea necesario.

(1) No hay garantía de que la salida de error no aparezca en stdout , ¡algunos programas descargarán todos los resultados!

(2) Desafortunadamente, este no es siempre el caso. El código de salida está completamente controlado por el programa y algunos indicarán algunas condiciones de éxito con salidas distintas de cero. Nuevamente, revise el manual.

Seguido de la respuesta de Maximillian Laumeister:

las utilidades de Unix envían mensajes generales a stdout , y los mensajes de error a stderr , así que si solo desea ver los mensajes de error, entonces será suficiente suprimir stdout para que solo stderr llegue a la consola.

La forma de hacerlo (en ambos bash y fish ) es agregar > / dev / null al comando. Esto canaliza stdout a la nada, pero stderr (con sus mensajes de error) aún llega a la consola.

Por ejemplo:

El comando echo 1 > / dev / null no imprime nada, porque el normalse suprime la salida stdout y no se escribió nada en stderr .

El comando man doesnotexist> / dev / null imprime un mensaje de error, porque man escribe su mensaje de error en stderr .


¿Tiene algo que agregar a la explicación? Suena apagado en los comentarios. ¿Desea leer más respuestas de otros usuarios de Stack Exchange expertos en tecnología? Consulte el hilo de discusión completo aquí.


Cómo controlar tus Philips Hue Lights con la vieja aplicación

Cómo controlar tus Philips Hue Lights con la vieja aplicación "Gen 1"

La nueva aplicación Hue de Philips es bastante agradable, pero le faltan algunas características muy útiles de la "Gen 1 original" aplicación Afortunadamente, la aplicación Gen 1 todavía está disponible para su descarga, así que si necesita esas funciones antiguas, aquí le mostramos cómo obtenerlas. RELACIONADO: Cómo configurar sus luces de tono de Philips Si está configurando hasta sus luces Hue por primera vez, recomendamos usar la aplicación Gen 2; puede ver las instrucciones para configurarla en nuestra guía Hue de Philips.

(how-to)

Qué es Bias Lighting y por qué debería usarlo

Qué es Bias Lighting y por qué debería usarlo

Hay una buena probabilidad de que haya estado viendo televisión y trabajando en su computadora durante años de una manera que fatiga sus ojos, aumenta su posibilidad de dolores de cabeza y disminuye su disfrute y comodidad en general. Siga leyendo mientras le mostramos cómo crear una experiencia de visualización cómoda y de alto contraste con iluminación de polarización.

(how-to)