BLOGTIMES
2012/12/08

bash で一時ファイルを使わずにコマンドの出力結果を比較する

  sh 
このエントリーをはてなブックマークに追加

linux を使っていて2つのコマンドの出力結果*1の差分を取りたい時には、それぞれの出力結果を一時ファイルに吐いて、それを diff するということをやると思いますが bash の独自機能を使うと一時ファイルを使わないでも差分を取ることができる事が分かったのでメモ。

posix shell で標準入力同士の diff (1) を実現する方法

例えば bash (1) の場合は以下の様にする事で簡単に比較できる。
$ diff <(command1) <(command2)

試しにやってみたら確かにこれで diff が簡単に取れますね。
diff に限らずファイルを2つ使って動くようなコマンドであれば適用できるようです。

$ diff -u <(seq 0 3) <(seq 1 4) --- /dev/fd/63 2012-12-08 02:02:27.106453447 +0900 +++ /dev/fd/62 2012-12-08 02:02:27.107453280 +0900 @@ -1,4 +1,4 @@ -0 1 2 3 +4 $ cat <(seq 1 3) <(seq 4 6) 1 2 3 4 5 6

2013/12/10 追記

これはプロセス置換と呼ばれる機能のようです。

Man page of BASH

プロセス置換 (process substitution) がサポートされるのは、 名前付きパイプ (FIFO) または ファイル・ディスクリプターの /dev/fd 形式での指定 をサポートしているシステムです。これは <(list) または >(list) の形になります。 プロセス list は、その入力や出力が FIFO または /dev/fd 中の 何らかのファイルに接続された状態で実行されます。 このファイルの名前は、展開の結果として、 引き数の形で現在のコマンドに渡されます。 >(list) の形式を使った場合、 ファイルへの書き込みは list への入力となります。 <(list) の形式を使った場合、 引き数として渡されたファイルは list の出力を得るために読み込まれます。
  • *1: 例えばlsの結果など。

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/5429
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン