ふり返る暇なんて無いね

日々のメモ書きをつらつらと。メインブログに書くほどでもないことを流してます

コマンドの出力結果の一時ファイルを作りたくなったら、プロセス置換を思い出すと良いかも知れない

たとえば、こんなことしたいとき、

# 待避させたテーブルと現行テーブルの差分を取りたい
mysqldump_cmd="mysqldump -u root --default-character-set=utf8 --skip-extended-insert --no-create-info"
${mysqldump_cmd} some_database user       > /tmp/user_sql.sql
${mysqldump_cmd} some_database user_old > /tmp/user_old.sql
diff -u /tmp/user.sql /tmp/user_old.sql

プロセス置換を使ってあげると一時ファイルを作らずにこんな風に書ける。

mysqldump_cmd="mysqldump -u root --default-character-set=utf8 --skip-extended-insert --no-create-info"

diff -u <(${mysqldump_cmd} some_database user) <(${mysqldump_cmd} some_database user_old)

プロセス置換は<(コマンド) と書くことでコマンドの出力を入力ファイルのように扱える機能です。
逆の>(コマンド)なパターンもありますが、昔の記事で書いたパターンしか自分使ったこと無いです。何か良い使い方知りたい。

exec > >(tee --append /tmp/$(date +"%Y.%m.%d")_$(id --user).work.log) 2>&1


POSIX互換じゃないのでbashzshを使わないといけないのですが、最近のlinuxを使っていれば、だいたいユーザのshellはbash(感覚値)なので普通にコマンドラインで使う分には問題ないと思います。

(ここまで書いて例があまり良くない気がした)