команда как wc но с тройником

команда как wc но с тройником

Я хочу сделать резервную копию базы данных с помощью 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

Обратите внимание, что >здесь не является обычным перенаправлением, а необходимой частью синтаксиса. Вам понадобится второй, >если вы захотите объединить его с реальным перенаправлением (с пробелом между ними, чтобы это не читалось как >>redirect-for-append).

Связанный контент