Redireciona stderr e stdout para / dev / null com / bin / sh

48

Eu tentei de todas as maneiras redirecionar os stdout e stderr para /dev/null sem sucesso algum. Eu tenho quase toda a minha vida executar bash que eu nunca tive esse problema com, mas por uma vez no BSD eu estou preso com /bin/sh .

O que eu tentei:

if ls ./python* 2> /dev/null; then
    echo found Python
fi

... o que funciona; Se o Python não estiver presente, ele silenciará as mensagens de erro de ls. No entanto, se python.tgz estiver presente, será exibida uma linha com a seguinte aparência:

# ./test.sh
./python-2.7.3p1.tgz

Eu tentei:

if ls ./python* &> /dev/null; then
    echo found Python
fi

e

if ls ./python* 2>1 > /dev/null; then
    echo found Python
fi

e

if ls ./python* > /dev/null; then
    echo found Python
fi

Nada realmente funciona. Eu só posso redirecionar uma das saídas, não as duas ao mesmo tempo.

    
por Torxed 25.06.2013 / 21:12

1 resposta

82

Eu acredito que o que você está procurando é:

ls good bad >/dev/null 2>&1

Você precisa redirecionar o stdout primeiro antes de duplicá-lo no stderr ; se você duplicá-lo primeiro, o stderr apenas apontará para o que o stdout originalmente apontou.

No bash você pode fazer isso com &>/dev/null , mas essa é uma extensão bash.

    
por 25.06.2013 / 21:22