Qual é a melhor política para executar programas GUI da CLI para silenciar mensagens que não sejam de erro?

Qual é a melhor política para executar programas GUI da CLI para silenciar mensagens que não sejam de erro?

Quando, no Linux, executamos programas gráficos (como Sublime Text por exemplo) a partir do Terminal, o programa funciona bem, mas registra no console mensagens que não são exatamente falhas, nem mensagens de log úteis, apenas "coisas" 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 são problemáticos ao executar o programa em segundo plano e continuar a usar o Terminal.

Qual é a melhor prática para remover isso?

Pensei em substituir o binário por um script que envolve a inicialização do binário, mas suprime todas as saídas ( > /dev/null 2>&1), mas não existe uma maneira mais limpa de fazer isso?

Responder1

No bash, você pode fazer isso >/dev/null 2>&1com &>/dev/null.

Você poderia fazer 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; }  

Então você faria:

silence sublime_text

ou

abandon sublime_text

Dependendo se você ainda deseja ou não controlar facilmente o texto sublime do terminal.

(A mágica do $@ é lidar com argumentos mais complexos)

informação relacionada