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