He intentado todo tipo de formas de redirigir tanto stdout
y stderr
hasta /dev/null
sin 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.tgz
está 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/sh
han implementado la&>/dev/null
sintaxis, 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)sh
se basa en pdksh. No hay más Bourne shell hoy en día.csh
introducido>&
también disponible enzsh
.bash
eligió&>
(ahora también soportado porzsh
y algunospdksh
derivados) aunque claramente rompe el cumplimiento POSIX ya quefoo &> file
es una sintaxis POSIX perfectamente válida que significa algo completamente diferente.foo &> file
es comofoo & > file
ofoo & : > 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.zsh
lo agregó para conveniencia de los usuarios de csh (csh no tiene>&2
). Son solo azúcar sintáctico, solo use el> file 2>&1
que sea estándar y portátil (para conchas tipo Bourne).