Estoy tratando de entender cómo funciona exactamente la redirección eneste comando
# tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)
¿Cuál es la traducción al inglés?
¿Todos los datos de tar
se redirigen como entrada pv
y luego pv
se redirigen a backup.tgz
?
Entonces, ¿por qué se requiere el soporte pv
?
Entonces ¿cómo tiene sentido esta redirección?
tar -czf - ./Documents/ | (pv -n > backup.tgz) 2>&1 | dialog --gauge "Progress" 10 70
¿ Después de pv
cuál es el significado de 2>&1
?
Respuesta1
Ver¿Cuáles son los operadores de control y redirección del shell?yOrden de redireccionespara fondo.
tar -czf - ./Downloads/ | (pv -p --timer --rate --bytes > backup.tgz)
le dice al shell que se ejecute tar -czf - ./Downloads/
con la salida estándar redirigida a (pv -p --timer --rate --bytes > backup.tgz)
.
(pv -p --timer --rate --bytes > backup.tgz)
le dice al shell que se ejecute pv -p --timer --rate --bytes
con la entrada estándar conectada a la tubería desde tar
y la salida estándar redirigida a backup.tgz
. El efecto general, dado que tar
se le indica que cree un archivo comprimido y lo envíe a su salida estándar ( f -
), es crear un archivo comprimido, canalizarlo pv
y luego escribirlo pv
en backup.tgz
. pv
muestra una barra de progreso, que se actualiza a medida que los datos fluyen a través de ella.
Los paréntesis no son obligatorios.
Su segundo comando cambia la segunda mitad de la primera tubería:
(pv -n > backup.tgz) 2>&1
escribe nuevamente en backup.tgz
, pero también redirige el error estándar del subshell (introducido entre paréntesis) a la salida estándar y alimentaesoen dialog
el cual produce su propia visualización de progreso.
Los paréntesis son necesarios aquí si las redirecciones están configuradas en el orden indicado en su comando: pv -n > backup.tgz 2>&1
redirigiría tanto pv
la salida estándar como el error estándar a backup.tgz
, que no es lo que desea. El efecto deseado también se puede lograr redirigiendo primero el error estándar: pv -n 2>&1 > backup.tgz
.