Eu tentei todos os tipos de maneiras de redirecionar ambos stdout
e stderr
para /dev/null
sem sucesso. Eu tenho quase toda a minha vida bash que eu nunca tive esse problema, mas pela primeira vez no BSD eu estou preso /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, 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. Só posso redirecionar uma das saídas, não as duas ao mesmo tempo.
fonte
/bin/sh
implementaram a&>/dev/null
sintaxe, aparentemente não tão ou eu tenho uma versão mais antiga (o que eu não posso ecoar de forma alguma, correndo OpenBSD 5.3 tho assim deve ser suficiente)sh
é baseado em pdksh. Hoje não há mais conchas Bourne.csh
introduzido>&
também disponível emzsh
.bash
escolheu&>
(agora também suportado porzsh
e algunspdksh
derivados), apesar de claramente quebrar a conformidade com o POSIX, poisfoo &> file
é uma sintaxe POSIX perfeitamente válida, o que significa algo completamente diferente.foo &> file
é comofoo & > file
orfoo & : > file
, que é executado foo em segundo plano e abre um arquivo para gravação sem nenhum comando (é improvável que seja usado assim).>&
não é o ideal ou como ele entra em conflito com os>&2
,>&-
operadores.zsh
adicionou-o por conveniência para usuários do csh (o csh não possui>&2
). Eles são apenas açúcar sintático, basta usar o> file 2>&1
que é padrão e portátil (para cascas tipo Bourne).