bash
suporta isso, mas você declara explicitamente que seu shell atual não é bash
, mas sim sh
, que é um shell diferente.
Eu tenho isso:
$ echo $SHELL
/bin/sh
$ uname -a
FreeBSD 11.0-RELEASE-p8
E isso funciona:
sudo bash my_script.sh some_arg
Mas isso não:
sudo bash my_script.sh some_arg >& /dev/null
Erro:
-sh: Syntax error: Bad fd number
No Linux com o bash padrão como um shell, isso funciona bem.
Como consertar isso?
No script eu tenho isto:
#!/usr/local/bin/bash
# other stuff
bash
suporta >&
, mas /bin/sh
não (pelo menos não para redirecionar para um arquivo).
Sua linha de comando é interpretada por /bin/sh
antes de ser passada para sudo
e bash
.
Eu não posso testar isso em bash
(mas funciona com outros shells) - você pode tentar usar a opção -c
com uma string entre aspas:
sudo bash -c "my_script.sh some_arg >& /dev/null"
A sintaxe correta seria:
sudo my_script.sh some_arg > /dev/null 2>&1