comando como wc pero con comportamiento en T

comando como wc pero con comportamiento en T

Quiero hacer una copia de seguridad de una base de datos usando psqlun COPYcomando. aquí está mi guión:

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

También quiero saber cuántas líneas se copian de la base de datos, pero psql no tiene esa característica. entonces necesito un comando externo. Necesito algo como esto:

psql ... | wc -l | bzip2

¿Hay alguna solución? La única solución que he encontrado es usar quince:

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

Ahora desde otra ventana de terminal puedo usar wc:

wc -l /home/backup.fifo

Respuesta1

Ambos bashy zshtienen una >(pipeline)característica:

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

Tenga en cuenta que >aquí no se trata de una redirección normal, sino de una parte necesaria de la sintaxis. Necesitaría un segundo >si quisiera combinarlo con una redirección real (con un espacio entremedio para que no se lea como >>redirección para agregar).

información relacionada