Estou tentando executar uma operação dd específica e anexando dados "brutos" da transferência para um arquivo de log que será pesquisado por outra coisa, para fornecer uma exibição ao vivo da transferência em outra interface (ou seja, não terminal).
A operação dd é:
dd if=/some/lvm bs=512K | gzip -c > /tmp/whatever
A maneira mais simples que eu posso ver é a saída desse comando para um arquivo e matar -SIGUSR1 pid simultaneamente e visualizar a saída, embora eu não possa encontrar uma maneira de armazenar o pid do processo em uma variável e usá-lo no comando kill .
Eu vi esse um dois forros ao redor:
dd if=/some/lvm of=/some/fat/image/which/I/cant/use bs=512K& pid=$!; \
sleep 1; while [[ -d /proc/$pid ]]; do kill -USR1 $pid && sleep 1; done
Embora eu não entenda como ele puxa o pid como uma variável, não posso modificá-lo para trabalhar com minha saída canalizada.
Eu estou feliz olhando para alternativas para dd, embora o mais apenas dar complicação ainda mais, como dcfldd que atualiza a mesma linha embora alguns, eu presumo método curses-like. Isso torna difícil tirar um instantâneo dessa saída a cada segundo e extrair os dados de que preciso. Se houver uma maneira fácil, posso lidar com isso ou até mesmo canalizar para pv se puder obter a saída "bruta".
Por favor, me esclareça. ; -)
Atenciosamente
EDIT: Então eu encontrei uma "solução", ainda não é bonita, mas
Eu posso usar pgrep para encontrar um id de processo, então enquanto o comando dd está rodando e sendo enviado para um arquivo, eu rodaria watch -n1 'sudo kill -USR1 $(pgrep ^dd)'
para produzir progresso na transferência a cada segundo que pode ser interpretado pelo poller.
Ainda não é uma solução elegante e parece um bocado. Se há uma maneira melhor, ainda estou aberto a sugestões. : -)