xargs + pv = испорченный терминал

xargs + pv = испорченный терминал

Если мне нужен небольшой индикатор прогресса моей длительной операции, я могу использоватьпросмотрщик труб:

ssh pc2 cat some.file | pv -nC reading | gzip --fast | pv zipping > some.file.gz

это дает мне забавный небольшой дисплей, показывающий, как быстро все происходит:

reading:  470MiB 0:00:18 [26.7MiB/s] [   <=>                              ]
zipping: 99.6MiB 0:00:18 [5.61MiB/s] [          <=>                       ]

но когда я делаю несколько вещей параллельно, вывод становится совершенно беспорядочным:

cat file.list | xargs -P 4 --replace={} sh -c "ssh pc2 cat {} | pv -nC r.{} | ..."

есть ли способ заставить это работать?

man pvговорит, что есть способ обойти вывод pvв утилиту под названием dialog, но я с этим не знаком

решение1

Вы можете выполнить каждый экземпляр программы в новом терминале или в диалоговом окне. Для терминала

cat file.list | xargs -P 4 --replace={} gnome-terminal -x sh -c "ssh pc2 cat {} | pv -nC r.{} | ..."  

Для просмотра в диалоговом окне zenity

 cat file.list | xargs -P 4 --replace={} sh -c "ssh pc2 cat {} | pv -nC r.{} | zenity --text-info | ..."

решение2

Если у вас установлен GNU Parallel:

cat file.list | parallel --tmux -P 4 'ssh pc2 cat {} | pv -nC r.{} | ...'

Это запустит задания в tmux. Затем вы можете прикрепиться к tmux:

tmux attach

Если GNU Parallel не упакован для вашей системы, его установка займет 10 секунд:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Чтобы узнать больше: Посмотрите вступительное видео для краткого ознакомления: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Пройдитесь по учебнику (man parallel_tutorial). Ваша командная строка будет вам за это благодарна.

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