Primeiro, eu também acho irritante que esses avisos apareçam em um Ubuntu pronto para uso, sem o método "adequado" para desativá-los, o que eu pude encontrar (parece que a "solução" mais comum é ou para instalar o gir1.2-gtksource-3.0
, que parece não funcionar, já que ele já está instalado, ou para ignorá-los - mas eu quero suprimi-los completamente, já que eles apenas fazem meu terminal barulhento).
Eu criei o seguinte código que até agora parece se comportar exatamente como eu esperava, e é baseado na resposta do TuKsn, mas melhora um pouco para:
- Trabalhe por padrão (
gedit ...
) sem precisar usar F12 ou algum outro atalho (para invocar o uso não filtrado/usr/bin/gedit ...
). - Exibe o nome do comando digitado quando ele termina como uma tarefa em segundo plano.
Ainda pode ser generalizado um pouco, mas por enquanto, se você precisar do mesmo tratamento para outros comandos, duplique a função gedit()
para o outro nome de comando que precisa do mesmo filtro.
# solution adapted from: https://sobrelinux.info/questions/3747/how-to-stop-gedit-and-other-programs-from-outputting-gtk-warnings-and-the-like"$*" ]; then
# write the real command to history without the prefix
# syntax adapted from http://stackoverflow.com/questions/4827690
history -s "$historyName ${@:2}"
# catch the command output
errorMsg=$( $* 2>&1 )
# check if the command output contains not a (one of two) GTK-Warnings
if ! $(echo $errorMsg | grep -q 'Gtk-WARNING\|connect to accessibility bus'); then
echo $errorMsg
fi
fi
}
gedit() {
suppress-gnome-warnings $FUNCNAME $(which $FUNCNAME) $@
}
E uma versão melhor (muito menor, totalmente genérica, não é necessário reescrever o histórico desde que seja invocado como está, e melhor para filtrar por linha, em vez de toda a saída):
# generates a function named which:
# - executes $(which ) [with args]
# - suppresses output lines which match
# e.g. adding: _supress echo "hello\|world"
# will generate this function:
# echo() { $(which echo) "$@" 2>&1 | tr -d '\r' | grep -v "hello\|world"; }
# and from now on, using echo will work normally except that lines with
# hello or world will not show at the output
# to see the generated functions, replace eval with echo below
# the 'tr' filter makes sure no spurious empty lines pass from some commands
_supress() {
eval "() { $(which ) \"$@\" 2>&1 | tr -d '\r' | grep -v \"\"; }"
}
_supress gedit "Gtk-WARNING\|connect to accessibility bus"
_supress gnome-terminal "accessibility bus\|stop working with a future version"
_supress firefox "g_slice_set_config"