¿Cuál es la mejor política para ejecutar programas GUI desde CLI para silenciar los mensajes que no son de error?

¿Cuál es la mejor política para ejecutar programas GUI desde CLI para silenciar los mensajes que no son de error?

Cuando, en Linux, se ejecutan programas gráficos (como Sublime Text, por ejemplo) desde la Terminal, el programa funciona bien pero registra en la consola mensajes que no son exactamente fallas, ni mensajes de registro útiles, solo "cosas" como:

(sublime:15269): Gtk-WARNING **: Unable to locate theme engine in module_path: "oxygen-gtk",

(sublime:15269): GLib-CRITICAL **: Source ID 958 was not found when attempting to remove it

... que son problemáticos cuando se ejecuta el programa en segundo plano y se continúa usando la Terminal.

¿Cuál es la mejor práctica para eliminar esto?

Pensé en reemplazar el binario con un script que envuelve el inicio binario pero suprime todos los resultados ( > /dev/null 2>&1), pero ¿no existe una manera más limpia de hacerlo?

Respuesta1

En bash, puedes lograrlo >/dev/null 2>&1con &>/dev/null.

Podrías hacer algo como:

#Run a command in the background, ignoring its STDOUT and STDERR
silence() { local cmd="$1"; shift; "$cmd" "$@" &>/dev/null & }

#The same, but stop caring about it too (no job control, no SIGHUP when the parent terminal closes)
abandon() { silence "$@"; disown; }  

Entonces harías:

silence sublime_text

o

abandon sublime_text

Dependiendo de si deseas o no controlar fácilmente el texto sublime desde la terminal.

(La magia de $@ es manejar argumentos más complejos)

información relacionada