use*_*548 9 linux bash php console
在 bash 中,您可以投射一个名为clear清除所有屏幕命令的命令。
并与echo您可以打印你想要的任何屏幕上..
在我的简单脚本中,我经常需要打印我的命令所做的工作的百分比。
所以我可以做类似的事情..
echo "89%"
echo "90%"
echo "91%"
Run Code Online (Sandbox Code Playgroud)
等等..
我讨厌的是让屏幕充满百分比更新......
89%
90%
91%
...
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一个特殊的字符组合(例如“\033[01;31m”)可以用 bash 或 php echo 回显并告诉控制台“删除最后一个打印的字符..”
通过使用类似的东西来做到这一点:(php示例)
echo str_repeat($neg_character, strlen($last_percentage_update_string));
echo $new_percentage_update_string;
Run Code Online (Sandbox Code Playgroud)
我会在前一个的确切位置打印新字符串,而不会让屏幕充满线条
否则,我会寻找一种方法,以其他方式始终使用 bash 和 php 脚本(请至少包含 debian9 控制台和 php7 的实际工作示例)
Ste*_*itt 25
执行此操作的典型方法不是擦除单个字符,而是使用回车 ( \r)返回到行首:
printf "89%%"; sleep 1; printf "\r90%%\n"
Run Code Online (Sandbox Code Playgroud)
请注意,这不会清除线路,因此您需要在必要时进行处理。简单的选项是在末尾添加空格,或使输出固定宽度(例如,printf "%2d%%\n" 1给出前导空格)。
有终端转义允许您四处移动并清除屏幕的某些部分,即 CSI 序列,但它们依赖于终端(尽管实际上现在到处都支持 VT100 转义)。例如
printf "89%%"; sleep 1; printf "\e[3D90%%\n"
Run Code Online (Sandbox Code Playgroud)
用于?[3D向左移动三个字符,并在它们上面写入(假设您printf支持\e);
printf "89%% hello"; sleep 1; printf "\e[0E\e[K90%%\n"
Run Code Online (Sandbox Code Playgroud)
用于?[0E移动到当前行的开头,并?[K清除到行尾(假设您的终端支持这些序列)。
tput提供了printf访问这些序列的终端和不可知的方式:
printf "89%%"; sleep 1; tput cub 3; tput el; printf "90%%\n"
Run Code Online (Sandbox Code Playgroud)
将光标向左移动三次 ( cub 3) 并清除到行尾 ( el),使用适合当前终端的任何字符序列;
printf "89%% hello"; sleep 1; tput hpa 0; tput el; printf "90%%\n"
Run Code Online (Sandbox Code Playgroud)
将光标移动到最左边的列 ( hpa 0) 并清除到行尾。
man terminfo会告诉你使用什么“功能名称” tput。
(请注意,上面示例的许多细节都假设您的所有输出都在同一行上。它们不应该是万无一失的,只是为了说明各种方法。)
对于 PHP 脚本中的类似屏幕控制,您可以查看 PECLncurses扩展。