Ocultando saídas de trabalho internas por script de shell

1

Eu faço um script de shell que pode atualizar as ferramentas. Eu quero que quando eu corro o

root@host:# sh script.sh

a saída será

Its installing
Its done

Mas agora meu script parece com

root@host:# sh script.sh
Its installing
Showing internat script working outputs
Its done

Como eu sei, o comando stty -echo oculta stdin no terminal e stty echo habilita stdin show no terminal. Mas como posso ocultar a saída do stander por script de shell?

    
por Mastan 10.05.2015 / 14:42

1 resposta

1

Redireciona stdout e stderr para /dev/null :

> /dev/null 2>&1

OR no bash:

&> /dev/null

Você pode fazer isso para todos os programas gerados pelo seu script usando exec com o redirecionamento no início do seu script.

exec > /dev/null 2>&1

A menos que os programas que você invoca em seu script acessem o terminal diretamente (raro), isso deve cobrir você.

Uma nota sobre redirecionamentos: A ordem é importante. Precisa ser > /dev/null 2>&1 , NÃO 2>&1 >/dev/null . Eu costumava pensar que o último funcionaria porque > parece uma seta que me faz pensar em ponteiros (como a palavra "redirecionar"), e se eu apontar stderr para stdout e então apontar stdout para / dev / null, então ambos devem estar apontando para / dev / null. Esse não é o caso, no entanto. Os descritores de arquivo não são ponteiros e é mais útil pensar em > como uma atribuição a um descritor de arquivo em vez de apontá-lo. (Mais ou menos, tecnicamente, um fd é apenas um número e você precisa de funções do sistema como dup2 para abrir um arquivo diferente no mesmo descritor de arquivo; mas acho que a atribuição é uma boa abstração de alto nível).

    
por 10.05.2015 / 18:09