
En el sistema Freebsd ejecuto mi script bash con un intento de redirigir la salida:
% sudo bash some_file.sh arg1 >/dev/null 2>&1
Ambiguous output redirect.
% sudo bash some_file.sh arg1 &> /dev/null
Invalid null command.
Respuesta1
Parece que usas csh en tu línea de comando (consulta con echo $SHELL
).
- Usar la sintaxis csh para redirigir tanto stdout como stderr sería:
sudo bash some_file.sh arg1 >& /dev/null
- O mueva la redirección a la "parte bash" del comando con
sudo bash -c 'some_file.sh arg1 >/dev/null 2>&1'
Respuesta2
Estuviste cerca, pero ninguna de esas es la sintaxis correcta para el shell TENEX C.
Recuerde: el shell de inicio de sesión interactivo que está utilizando en FreeBSD, a menos que lo haya cambiado, es el shell TENEX C. La redirección del sudo
comando debe utilizar la sintaxis de redirección del shell TENEX C. No importa que esté ejecutando el shell Bourne Again a través de sudo
. eso solo esta determinadodespués de que la redirección haya tenido lugar y sudo
ya se haya ejecutado.
Este:
% sudo bash some_file.sh arg1 >/dev/null 2>&1es efectivamente lo mismo que
% >/dev/null >&1 sudo bash some_file.sh arg1 2que intenta redirigir la salida estándar dos veces a dos lugares diferentes.
Este:
% sudo bash some_file.sh arg1 &> /dev/nulles en realidad
% sudo bash some_file.sh arg1 & > /dev/nully será reescrito como tal en su historial de comandos. Son dos comandos unidos por
&
y sudo
un comando sin nombre ni argumentos. Esto último no está permitido en el shell TENEX C.
Así es como se redirige tanto la salida estándar como el error estándar al /dev/null
shell TENEX C:
% sudo bash some_file.sh arg1 >& /dev/null