unf*_*nfa 8 terminal scrolling
我想创建多个进度条并随时更新它们,而不需要清除整个屏幕(我希望以前的标准输出内容保留在屏幕上)。
我需要:
echosleep我的想法是我希望用户能够向后滚动以阅读以前的标准输出内容。
如果我不关心回滚,我只需使用clear并再次写出我需要的内容:
while [ true ]; do echo "$SECONDS"; sleep 0.1; clear; done
Run Code Online (Sandbox Code Playgroud)
然而,这使得回滚完全不可读,因为clear只是打印出足够的换行符以将先前的终端输出推到视图之外。
当我运行htop并关闭它时 - 它将我的终端恢复到与启动 htop 时完全相同的状态。这样的事情可以在 bash 脚本中实现吗?
tput sc tput ed和tput rc.来自tput 手册:
tput sc保存光标位置
tput rc恢复光标位置
tput ed清除到屏幕末尾
例子:
tput sc
while :; do
tput ed
echo -e "$SECONDS\n$SECONDS\n$SECONDS"
sleep 1
tput rc
done
Run Code Online (Sandbox Code Playgroud)
它是如何工作的?
tput sctput ed清除到屏幕末尾以确保正确的结果echosleep 1刷新前等待一秒钟tput rc将光标移回到我们刚刚打印的行的开头