0

我可以通过 Whiptail 跟踪 rsync 进度,使用 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

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

我需要如何修改 Perl 版本?

4

1 回答 1

1

您可能正在遭受缓冲。尝试在 STDOUT 上设置自动刷新

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

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

BEGIN { $/ = "\r"; *STDOUT->autoflush }
于 2019-10-03T16:09:26.607 回答