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

0

No sistema Freebsd, executo meu script 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.
    
por Saurabh 16.12.2016 / 09:44

2 respostas

2

Parece que você usa o csh na sua 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'
por 16.12.2016 / 10:03
2

Você chegou perto, mas nenhuma delas é 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. Seu redirecionamento do comando sudo tem que usar a sintaxe de redirecionamento do shell TENEX C. Não importa se você está executando o shell Bourne Again via sudo . Isso só é determinado após o redirecionamento ter ocorrido e sudo já ter sido executado .

Isto:

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

Isto:

% sudo bash some_file.sh arg1 &> /dev/null
é realmente
% 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 & , sudo e um comando sem nome nem argumentos. Este último não é permitido no shell TENEX C.

Isto é como redirecionar a saída padrão e o erro padrão para /dev/null no shell TENEX C:

% sudo bash some_file.sh arg1 >& /dev/null
    
por 16.12.2016 / 10:08

Tags