Just another IT site ※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。At Your Own Risk!! TURN BACK WHILE YOU CAN
PR

コマンドの結果を標準出力に出しつつファイルにも出力して結果をその場で目視でも確認できるようにする

※IT系の記事は当方環境での実施内容となるため実施する場合は自己責任でお願いいたします。スクリプトはAI生成のものも多いのでコピー&ペーストの際は文字コードに注意ください!

【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 本来の終了ステータスが隠れてしまうことがあるため、シェルスクリプトなどで厳密にエラーハンドリングを行う場合は注意が必要です。
タイトルとURLをコピーしました