たとえば、こんなことしたいとき、
# 待避させたテーブルと現行テーブルの差分を取りたい 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互換じゃないのでbashやzshを使わないといけないのですが、最近のlinuxを使っていれば、だいたいユーザのshellはbash(感覚値)なので普通にコマンドラインで使う分には問題ないと思います。
(ここまで書いて例があまり良くない気がした)