Estou tentando suprimir GtkDialog
avisos em zenity
e yad
:
$ zenity --error --text hello
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
O redirecionamento de erros e a filtragem funcionam:
$ zenity --error --text hello 2> >(grep -v GtkDialog >&2)
SIM... A mensagem de aviso irritante desaparece!!
Isso pode ser colocado ~/.bashrc
para o trabalho de desenvolvimento conforme respondido aqui:
e aqui:
No entanto, ao criar um script para uso de outras pessoas, você não deseja o fardo de alterar seus arquivos ~/.bashrc
.
Estou tendo problemas para criar um atalho de digitação para: 2> >(grep -v GtkDialog >&2)
para ser usado dentro do script.
Por muitas razões, a atribuição de variáveis GTK_SPAM="2> >(grep -v GtkDialog >&2)"
seguida posteriormente pelo uso de variáveis "$GTK_SPAM"
não funciona.
alias zenity="zenity 2> >(grep -v GtkDialog >&2)"
antes de chamar o script funciona, mas não posso usar isso em um script.
Usar uma matriz para manter o atalho de digitação não está funcionando:
$ aGtkSpam=(2\> \>\(grep -v GtkDialog \>\&2\))
$ DumpArray "${aGtkSpam[@]}"
Array Elements:
0: 2>
1: >(grep
2: -v
3: GtkDialog
4: >&2)
$ zenity --error --text hello "${aGtkSpam[@]}"
This option is not available. Please see --help for all possible usages.
$ yad --text hello 2> >(grep -v GtkDialog >&2)
$ yad --text hello "${aGtkSpam[@]}"
Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged.
Encontrei muitas respostas genéricas excelentes sobre divisão de palavras e parâmetros que devem resolver meu problema, mas uma sintaxe específica me escapa.
Alguma pista?
Não acho que a sintaxe sozinha possa ajudá-lo aqui - devido à ordem na qual o shell configura redirecionamentos e expande variáveis. Para dar uma ilustração muito simples:
ou seja, tudo foi expandido "corretamente", mas
> /dev/null
simplesmente se tornou uma lista de argumentos de string passados paraecho
.Você pode forçar a avaliação usando
eval
:mas realmente seria melhor redirecionar o fluxo durante o seu script usando
exec
:ou, se você quiser desativar o filtro antes do final do script, com base em Depois de usar
exec 1>file
, como posso interromper esse redirecionamento do STDOUT para o arquivo e restaurar a operação normal do STDOUT? deve ser possível fazere então mais tarde
para recuperar o fluxo duplicado.
Você pode definir e usar aliases em seu script se definir a
expand_aliases
opção shell, por exemplo:Agora, cada
zenity
linha se comporta como se tivesse2> >(grep -v GtkDialog >&2)
sido adicionada e você pode desabilitar esse comportamento normalmente adicionando uma barra invertida oucommand
:ambos ignoram o alias.
Leitura adicional
Você pode usar a função no script.
zenity
eyad
tenha informações úteis em stdout, então sugiro redirecionar apenas stderr para/dev/null
função btw pode ser definida em .bashrc se necessário na linha de comando, não no script