
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 com
sudo 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 sudo
comando 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 sudo
já 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 2que 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/nulle será reescrito como tal em seu histórico de comandos. São dois comandos unidos por
&
e sudo
um 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/null
no shell TENEX C:
% sudo bash algum_arquivo.sh arg1 >& /dev/null