FreeBsdで出力をリダイレクトできない

FreeBsdで出力をリダイレクトできない

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 シェルです。コマンドのリダイレクトには、sudoTENEX 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

関連情報