wc のようなコマンドだが、tee の動作を伴う

wc のようなコマンドだが、tee の動作を伴う

psqlコマンドを使用してデータベースをバックアップしたいですCOPY。スクリプトは次のとおりです:

psql "user=${USERNAME} host=${HOSTNAME} dbname=${DBNAME} password=${PASSWORD}" -c \
"COPY (SELECT * FROM tbl) ORDER BY id ASC) TO STDOUT WITH CSV HEADER;" | \
bzip2 -z -f --best -c > /home/${DBNAME}-${FILENAME}.csv.bz2

また、データベースから何行コピーされたかを知りたいのですが、psql にはそのような機能がありません。そのため、外部コマンドが必要です。次のようなものが必要です。

psql ... | wc -l | bzip2

解決策はありますか? 私が見つけた唯一の解決策は、fifo を使用することです。

mkfifo /home/backup.fifo
psql ... | tee /home/backup.fifo | bzip2

今、別のターミナルウィンドウから以下を使用できますwc:

wc -l /home/backup.fifo

答え1

bashと には、どちらも機能zshがあります>(pipeline)

psql ... | tee >(wc -l) | bzip2

>ここでの は通常のリダイレクトではなく、構文の必須部分であることに注意してください。実際のリダイレクトと組み合わせる場合は、2 つ目の が必要になります (間にスペースを入れて、追加用のリダイレクト>として読み取られないようにします)。>>

関連情報