Как использовать Perl с датчиком Whiptail? - PullRequest
0 голосов
/ 03 октября 2019

Я могу отслеживать ход выполнения rsync через Whiptail, используя Awk для анализа вывода rsync, однако я озадачен тем, почему аналог Perl не работает (индикатор Whiptail остается на 0).

Это рабочая командная строка Awk:

rsync --info=progress2 --no-inc-recursive --human-readable <source> <destination> |
  stdbuf -o0 awk -v RS='\r' '$2 ~ /%$/ { print substr($2, 0, length($2) - 1) }' |
  whiptail --gauge Syncing 20 80 0

Это эквивалент Perl (я предполагаю):

rsync --info=progress2 --no-inc-recursive --human-readable <source> <destination> |
  stdbuf -o0 perl -lne 'BEGIN { $/ = "\r" } print /(\d+)%/' |
  whiptail --gauge Syncing 20 80 0

Если я удаляю команду Whiptail из версии Perl, процентные числапечатаются как положено.

Как мне нужно изменить версию Perl?

1 Ответ

1 голос
/ 03 октября 2019

Возможно, вы страдаете от буферизации . Попробуйте установить autoflush на STDOUT.

BEGIN { $/ = "\r"; $|++ }

, или если Perl по крайней мере версии 5.14, или иначе с добавлением переключателя -MIO::Handle, вы можете быть более явным:

BEGIN { $/ = "\r"; *STDOUT->autoflush }
...