コマンド実行結果のdiff を取るといろいろ捗る

たまに必要になる diff コマンドのTips メモです。

コマンド実行結果のdiff を取る

bash なら <(command) の形式で diff にコマンドの結果を入力できる。 シェルスクリプトとして記述する場合は set +o posix を指定すると使える。

$ diff <(echo "hoge") <(echo "fuga")
1c1
< hoge
---
> fuga

bash 以外でも command1 | (command2 | diff /dev/fd/3 -) 3<&0 の形式で同様の処理が可能です。

echo "hoge" | (echo "fuga" | diff /dev/fd/3 -) 3<&0
1c1
< hoge
---
> fuga

command1 の結果は 3<&0 により、ファイルディスクリプタ /dev/fd/3 へ出力される。 ハイフン - は標準出力を受け取るので command1command2 の出力結果の diff が実行結果になる。

DNS レコードを比較する

NS 移行の際に、DNS レコードの設定が間違っていないか確認するために diff してみる。 結論から言うと、新旧のNS へレコードを問い合わせて比較するだけ。

diff\
  <(dig @ns-before.example.com example.com a +short | sort)\
  <(dig @ns-after.example.com  example.com a +short | sort)

dig コマンドでDNS レコードを確認する

余計な出力を省略するため +short を指定する。あとは問い合わせしたいNS とレコードを指定すれば良い。

dig @ns.example.com example.com a +short

複数の値が設定されている場合があるので、 sort して差分が出ないようにして diff へ渡すと設定内容に問題が無いかチェックできる。