【发布时间】:2015-12-30 23:15:57
【问题描述】:
我发现我正在使用这个很酷的进度条: https://stackoverflow.com/a/27147177/1480397
但我不知道它在做什么,我也没有用谷歌搜索它。
"\r\033[0G\033[2K[%'={$percentageDone}s>%-{$percetageLeft}s] - $percentageDone%% - $absoluteDone/$absoluteTotal - avg %.4f - %s",
这是我正在使用的。
我认为序列是:
-
\r- 回车,返回开始 -
\033[0G-Esc[0g清除当前列的标签` * -
\033[2K-Esc[2K清除整行* [%'={$percentageDone}s>%-{$percetageLeft}s]
*这不符合我的预期,当我删除代码时,来源:http://ascii-table.com/ansi-escape-sequences-vt-100.php
那么,这些序列是否正确提取?解释是否正确?还有为什么最后写的很酷吧?
[====> <much more spaces> ]
要测试的代码:
for ($i = 0; $i <= 100; $i++) {
$absoluteDone = $i;
$absoluteTotal = 100;
$percentageDone = floor(($absoluteDone / $absoluteTotal) * 100);
$percetageLeft = 100 - $percentageDone;
$avgTime = 10;
$setCursorToLineStart = "\033[0G";
$clearLine = "\033[2K";
$progressbarAndStatusInfo = sprintf(
$setCursorToLineStart
. $clearLine
. "[%'={$percentageDone}s>%-{$percetageLeft}s] - $percentageDone%% - $absoluteDone/$absoluteTotal - avg %.4f - %s",
"",
"",
$avgTime,
gmdate("H:i:s", $avgTime * ($absoluteTotal - $absoluteDone))
);
echo $progressbarAndStatusInfo;
sleep(1);
}
【问题讨论】:
-
不确定出了什么问题。我有四个需要理解的转义序列?这个问题的宽泛性是什么?
-
为“代码”提供上下文 (
sprintf!) -
看起来它正在尝试模仿 ncurses 样式更新。用不同长度的“=”写一行,然后用空格填充该行。然后回车,清除重复一遍。
标签: php bash ansi-escape