Bash出力キャプチャ構文の違いは何ですか?

Bash出力キャプチャ構文の違いは何ですか?

普通に使う

./aaa.sh 2>&1 | tee -a log

しかし、より簡単に見える新しいコマンドを見つけました。

./aaa.sh &> log

それでは、2番目のケースでは何を放棄する必要がありますか?

ベストアンサー1

リンゴとオレンジ。しかし、まず...

2>&1vsに関する限り、両方とも&>指揮者として機能します。標準エラー同じ場所に標準出力指示を受けています。

ただし、2番目のものはPOSIXと互換性がなく、それを使用するスクリプトはそれをサポートするシェルでのみ機能するため、移植性を放棄します。

Bashのマニュアルページに記載されているように、「意味は同じ」です。

標準出力と標準エラーをリダイレクトするには、2つの形式があります。

      &>word    and
      >&word

2つの形式のうち、最初の形式が好ましい。これは意味上次のとおりです。

      >word 2>&1

2番目の形式を使用すると、単語は数字または-に拡張できません。その場合、互換性の理由から他のリダイレクト演算子が適用されます(下記のファイル記述子のコピーを参照)。

しかし、やるべきことがもっとあります。また、tee最初のバージョンにアドインを追加するコマンドを使用しました。それはかかるだろう標準入力入力して2つの異なる場所に移動します。標準出力(このコマンドを対話的に実行する場合は通常画面/端末)とデータを含む指定されたファイル追加それに(-a上書きせずに追加すると言う)。

これを組み合わせた2番目のバージョンと比較してみてください。標準出力そして標準エラーファイルが上書きされ、log画面/ターミナルに表示されません。

結論:最初に述べたように、実際には2つの異なるコマンドですが、同等性の概念を拡張すると、一般的に言えば最初のバージョンは、携帯性に優れていたので優れていた。そしてaaa.shファイルに保存されていても出力を表示できます。もちろん、見たくない場合や古いファイルの内容を削除したい場合は、それは別の問題です。リンゴとオレンジ。

おすすめ記事