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回別の場所にリダイレクトしようとします。

これ:

% 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

関連情報