AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / ubuntu / Perguntas / 1144080
Accepted
WinEunuuchs2Unix
WinEunuuchs2Unix
Asked: 2019-05-18 08:54:07 +0800 CST2019-05-18 08:54:07 +0800 CST 2019-05-18 08:54:07 +0800 CST

Como faço para suprimir os avisos GtkDialog no zenity e yad usando o redirecionamento Bash em um script?

  • 772

Estou tentando suprimir GtkDialogavisos em zenitye 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 ~/.bashrcpara o trabalho de desenvolvimento conforme respondido aqui:

  • Como fazer com que o aviso “pai transitório” do zenity desapareça permanentemente (usando a função)

e aqui:

  • Como fazer com que o aviso de “pai transitório” do zenity desapareça permanentemente (usando alias)

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?

command-line bash redirect
  • 3 3 respostas
  • 2204 Views

3 respostas

  • Voted
  1. Best Answer
    steeldriver
    2019-05-18T10:00:44+08:002019-05-18T10:00:44+08:00

    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:

    $ arr=( ">" "/dev/null" )
    $ set -x
    $ echo foo "${arr[@]}"
    + echo foo '>' /dev/null
    foo > /dev/null
    

    ou seja, tudo foi expandido "corretamente", mas > /dev/nullsimplesmente se tornou uma lista de argumentos de string passados ​​para echo.

    Você pode forçar a avaliação usando eval:

    $ eval echo foo "${arr[@]}"
    + eval echo foo '>' /dev/null
    ++ echo foo
    

    mas realmente seria melhor redirecionar o fluxo durante o seu script usando exec:

    exec 2> >(grep -v GtkDialog >&2)
    

    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 fazer

    exec 3>&2 2> >(grep -v GtkDialog >&2)
    

    e então mais tarde

    exec 2>&3 3>&-
    

    para recuperar o fluxo duplicado.

    • 8
  2. dessert
    2019-05-18T11:55:31+08:002019-05-18T11:55:31+08:00

    Você pode definir e usar aliases em seu script se definir a expand_aliasesopção shell, por exemplo:

    #!/bin/bash
    shopt -s expand_aliases
    alias zenity='zenity 2> >(grep -v GtkDialog >&2)'
    …
    

    Agora, cada zenitylinha se comporta como se tivesse 2> >(grep -v GtkDialog >&2)sido adicionada e você pode desabilitar esse comportamento normalmente adicionando uma barra invertida ou command:

    \zenity        # and
    command zenity
    

    ambos ignoram o alias.

    Leitura adicional

    • Por que meu script Bash não reconhece aliases?
    • 7
  3. LeonidMew
    2019-05-18T09:22:22+08:002019-05-18T09:22:22+08:00

    Você pode usar a função no script. zenitye yadtenha informações úteis em stdout, então sugiro redirecionar apenas stderr para/dev/null

    #/bin/bash
    
    zen_nospam() {
      zenity "$@" 2&>1 >(grep -v GtkDialog >&2)
    }
    
    zen_nospam --error --text hello
    

    função btw pode ser definida em .bashrc se necessário na linha de comando, não no script

    • 6

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Existe um comando para listar todos os usuários? Também para adicionar, excluir, modificar usuários, no terminal?

    • 9 respostas
  • Marko Smith

    Como excluir um diretório não vazio no Terminal?

    • 4 respostas
  • Marko Smith

    Como descompactar um arquivo zip do Terminal?

    • 9 respostas
  • Marko Smith

    Como instalo um arquivo .deb por meio da linha de comando?

    • 11 respostas
  • Marko Smith

    Como instalo um arquivo .tar.gz (ou .tar.bz2)?

    • 14 respostas
  • Marko Smith

    Como listar todos os pacotes instalados

    • 24 respostas
  • Martin Hope
    Flimm Como posso usar o docker sem sudo? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    led-Zepp Como faço para salvar a saída do terminal em um arquivo? 2014-02-15 11:49:07 +0800 CST
  • Martin Hope
    ubuntu-nerd Como descompactar um arquivo zip do Terminal? 2011-12-11 20:37:54 +0800 CST
  • Martin Hope
    TheXed Como instalo um arquivo .deb por meio da linha de comando? 2011-05-07 09:40:28 +0800 CST
  • Martin Hope
    Ivan Como listar todos os pacotes instalados 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    David Barry Como determino o tamanho total de um diretório (pasta) na linha de comando? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher "Os seguintes pacotes foram retidos:" Por que e como resolvo isso? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford Como os PPAs podem ser removidos? 2010-07-30 01:09:42 +0800 CST

Hot tag

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve