Freebsdシステムでbashスクリプトを実行し、出力をリダイレクトしようとしています。
% sudo bash some_file.sh arg1 >/dev/null 2>&1
Ambiguous output redirect.
% sudo bash some_file.sh arg1 &> /dev/null
Invalid null command.
答え1
コマンドラインでcshを使用しているようです(確認echo $SHELL
)。
- csh構文を使用してstdoutとstderrをリダイレクトする方法は次のとおりです。
sudo bash some_file.sh arg1 >& /dev/null
- または、リダイレクトをコマンドの「bash部分」に移動します。
sudo bash -c 'some_file.sh arg1 >/dev/null 2>&1'
答え2
近いですが、TENEX Cシェルの構文が正しくありません。
覚えておいてください:これを変更しない限り、FreeBSDが使用する対話型ログインシェルはTENEX Cシェルです。コマンドリダイレクトはsudo
TENEX Cシェルリダイレクト構文を使用する必要があります。 Bourne Againシェルを実行するかどうかは問題ではありませんsudo
。ただ大丈夫リダイレクトが発生した後にsudo
実行。
これ:
% sudo bash some_file.sh arg1 >/dev/null 2>&1実際には
% >/dev/null >&1 sudo bash some_file.sh arg1 2標準出力を2回別の場所にリダイレクトしようとします。
これ:
% sudo bash some_file.sh arg1 &> /dev/null実際には
% sudo bash some_file.sh arg1 & > /dev/nullコマンド履歴に上書きされます。
&
で連結された2つのコマンドsudo
と名前もなくパラメータもないコマンドです。後者は TENEX C シェルでは許可されません。
/dev/null
標準出力と標準エラーをTENEX Cシェルにリダイレクトする方法は次のとおりです。
% sudo bash some_file.sh arg1 >& /dev/null