【AIによる概要】
diffの結果をリダイレクトではなくteeとパイプを使って出力するのは、ファイルに結果を書き込みつつ、リアルタイムで手元の画面(標準出力)でも確認するためです。代表的な理由は以下の2点に集約されます。1. 画面で結果を確認しながらファイルに残せるリダイレクト(>)を使うと、ファイルに保存されますがターミナル上には何も表示されません。差分が大きい場合、コマンド実行後に改めてファイルを開き直す必要がありますが、teeを使えば実行中に結果を目視で確認できます。 [1]bash# 実行結果が画面に表示されつつ、result.txt にも書き込まれる diff fileA fileB | tee result.txtコードは注意してご使用ください。2. リダイレクト先でさらにコマンドを繋げる(パイプラインの継続)リダイレクトは一番最後に行う処理であるため、ファイルに保存した後にその結果を別のコマンドで加工する(grepで絞り込むなど)ことができません。パイプでteeに渡せば、「ファイルへの保存」と同時に「後続のコマンドへのデータ渡し」を並行して行えます。bash# 差分のうち、削除された行(< で始まる行)だけをさらに抽出して別ファイルにする場合 diff fileA fileB | tee diff_all.txt | grep "^<" > deleted_only.txtコードは注意してご使用ください。
補足:リダイレクトの終了ステータス問題diffコマンドは「差異があるかないか」で終了ステータス($?)を返します。パイプ(|)を使うとteeの終了ステータスが返ってきてしまい、diff本来の終了ステータスが隠れてしまうことがあるため、シェルスクリプトなどで厳密にエラーハンドリングを行う場合は注意が必要です。
