如何将 Perl 与 Whiptail 仪表一起使用?

How to use Perl with the Whiptail gauge?

我可以通过 Whiptail 跟踪 rsync 进度,使用 Awk 解析 rsync 输出,但是,我对为什么 Perl 对应物不起作用(Whiptail 量表停留在 0)感到困惑。

这是工作的 Awk 命令行:

rsync --info=progress2 --no-inc-recursive --human-readable <source> <destination> |
  stdbuf -o0 awk -v RS='\r' ' ~ /%$/ { print substr(, 0, length() - 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

如果我从 Perl 版本中删除 Whiptail 命令,百分比数字将按预期打印。

我需要如何修改Perl版本?

您可能 suffering from buffering. Try setting autoflush 在 STDOUT 上。

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

或者如果 Perl 至少是 5.14 版本,或者添加 -MIO::Handle 开关,您可以更明确:

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