Não é possível redirecionar a saída no FreeBsd

Não é possível redirecionar a saída no FreeBsd

No sistema Freebsd eu executo meu script bash com uma tentativa de redirecionar a saída:

% sudo bash some_file.sh arg1 >/dev/null  2>&1
Ambiguous output redirect.


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

Responder1

Parece que você usa csh na linha de comando (verifique com echo $SHELL).

  • Use a sintaxe csh para redirecionar stdout e stderr seria:sudo bash some_file.sh arg1 >& /dev/null
  • Ou mova o redirecionamento para a "parte bash" do comando comsudo bash -c 'some_file.sh arg1 >/dev/null 2>&1'

Responder2

Você chegou perto, mas nenhuma dessas é a sintaxe correta para o shell TENEX C.

Lembre-se: O shell de login interativo que você está usando no FreeBSD, a menos que você o tenha alterado, é o shell TENEX C. O redirecionamento do sudocomando deve usar a sintaxe de redirecionamento do shell TENEX C. Não importa se você está executando o shell Bourne Again via sudo. Isso só é determinadodepois que o redirecionamento ocorreu e sudojá foi executado.

Esse:

% sudo bash algum_arquivo.sh arg1 >/dev/null 2>&1
é efetivamente o mesmo que

% >/dev/null >&1 sudo bash some_file.sh arg1 2
que tenta redirecionar a saída padrão duas vezes para dois locais diferentes.

Esse:

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

% sudo bash some_file.sh arg1 & > /dev/null
e será reescrito como tal em seu histórico de comandos. São dois comandos unidos por &e sudoum comando sem nome nem argumentos. Este último não é permitido no shell TENEX C.

Veja como redirecionar a saída padrão e o erro padrão /dev/nullno shell TENEX C:

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

informação relacionada