No se puede redirigir la salida en FreeBsd

No se puede redirigir la salida en FreeBsd

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 consudo 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 sudocomando 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 sudoya se haya ejecutado.

Este:

% sudo bash some_file.sh arg1 >/dev/null 2>&1
es efectivamente lo mismo que

% >/dev/null >&1 sudo bash some_file.sh arg1 2
que intenta redirigir la salida estándar dos veces a dos lugares diferentes.

Este:

% sudo bash some_file.sh arg1 &> /dev/null
es en realidad

% sudo bash some_file.sh arg1 & > /dev/null
y será reescrito como tal en su historial de comandos. Son dos comandos unidos por &y sudoun 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/nullshell TENEX C:

% sudo bash some_file.sh arg1 >& /dev/null

información relacionada