He intentado todo tipo de formas de redirigir tanto stdouty stderrhasta /dev/nullsin ningún éxito. Tengo casi toda mi vida corriendo bash con el que nunca he tenido este problema, pero por una vez en BSD estoy atrapado /bin/sh.
Lo que he intentado:
if ls ./python* 2> /dev/null; then
echo found Python
fi
... que funciona; Si Python no está presente, silenciará los mensajes de error de ls. Sin embargo, si python.tgzestá presente, se generará una línea con el siguiente aspecto:
# ./test.sh
./python-2.7.3p1.tgz
He intentado:
if ls ./python* &> /dev/null; then
echo found Python
fi
y
if ls ./python* 2>1 > /dev/null; then
echo found Python
fi
y
if ls ./python* > /dev/null; then
echo found Python
fi
Nada realmente funciona. Solo puedo redirigir una de las salidas, no ambas al mismo tiempo.
fuente

/bin/shhan implementado la&>/dev/nullsintaxis, aparentemente no es así o tengo una versión anterior (que no puedo hacer eco de ninguna manera, ejecutando OpenBSD 5.3 aunque debería ser suficiente)shse basa en pdksh. No hay más Bourne shell hoy en día.cshintroducido>&también disponible enzsh.basheligió&>(ahora también soportado porzshy algunospdkshderivados) aunque claramente rompe el cumplimiento POSIX ya quefoo &> filees una sintaxis POSIX perfectamente válida que significa algo completamente diferente.foo &> filees comofoo & > fileofoo & : > file, que se ejecuta en segundo plano y abre el archivo para escribir sin ningún comando (es poco probable que se use así).>&no es lo ideal, ya sea como entra en conflicto con los>&2,>&-operadores.zshlo agregó para conveniencia de los usuarios de csh (csh no tiene>&2). Son solo azúcar sintáctico, solo use el> file 2>&1que sea estándar y portátil (para conchas tipo Bourne).