
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 つの異なる場所に 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