Fechando a saída padrão (& -) [closed]

2

Estou tentando impedir que um programa GUI, iniciado a partir do terminal, grave no console. Para fazer isso, corro guiprogram >&- . Isso leva o programa a congelar algumas operações.

O que o operador >&- faz exatamente? Qual é o propósito pretendido? Você pode dar algum exemplo? É legítimo evitar escrever no console pelo uso dele? Por que o programa congela ao fechar a saída padrão?

    
por Shamaoke 31.03.2018 / 13:03

2 respostas

2

Se você quiser impedir que a saída de um programa apareça em qualquer lugar redirecionar para /dev/null :

guiprogram >/dev/null 2>&1

O fechamento de stdout só funciona se o programa souber como lidar com arquivos fechados.

Um uso prático de >&- é raro, você pode usá-lo se depois atribuir outro destino de saída a stdout e quiser ter certeza de que o canal de saída original foi fechado corretamente.

    
por 31.03.2018 / 15:57
1

Você teria que olhar o código-fonte para saber por que o programa congela. Poderia abortar ou travar também ou ignorar o problema:

bash -c 'exec >&-; echo foo; echo bar >&2'
    bash: line 0: echo: write error: Bad file descriptor
    bar

Este código de shell ignora o problema.

bash -c 'set -e; exec >&-; echo foo; echo bar >&2'
    bash: line 0: echo: write error: Bad file descriptor

Este código de shell é anulado devido ao erro.

Um congelamento pode ocorrer se houver algum tipo de função de registro com um loop "repeat até que tenha sido registrado com sucesso". Isso nunca acontece porque a gravação no descritor de arquivo 1 falha, portanto, o programa é capturado em um loop infinito.

    
por 31.03.2018 / 14:02