如何将 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 }
我可以通过 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 }