私はこれを持っています:
$ echo $SHELL
/bin/sh
$ uname -a
FreeBSD 11.0-RELEASE-p8
これは働きます:
sudo bash my_script.sh some_arg
しかし、これはそうではありません:
sudo bash my_script.sh some_arg >& /dev/null
間違い:
-sh: Syntax error: Bad fd number
これはbashがデフォルトシェルであるLinuxでうまくいきます。
どうすれば修正できますか?
スクリプトには次のものがあります。
#!/usr/local/bin/bash
# other stuff
答え1
bash
これは実際にはサポートされていますが、現在のシェルではなくbash
別のsh
シェルであることを明示的に指定します。
答え2
bash
>&
しかし、そうでは/bin/sh
ありません(少なくともファイルにリダイレクトしません)。
あなたのコマンドラインは次のように解釈されます。/bin/sh
今後sudo
とに渡されますbash
。
これをテストすることはできませんが(他のシェルでは動作します) - 引用符付き文字列を使用してオプションを試すことbash
ができます。-c
sudo bash -c "my_script.sh some_arg >& /dev/null"
答え3
正しい構文は次のとおりです。
sudo my_script.sh some_arg > /dev/null 2>&1