我编写了很多 bash 脚本来满足各种需求。最近我开始感受到在它们之上实施各种指标的冲动。
在自动无人值守安装脚本中知道正在执行哪个操作会很酷。
另外..最好有一个状态栏显示实际进度的百分比。
Linux(最好是 Debian)中有一些像我的模型那样的库和命令用于操作终端输出?
(以下命令是假模型,只是为了让读者理解)
txtoverlay -k head -c azure“所有命令之上的 MyString”
或者
txtovelay -k tail -c green -a right "[ 完成度: 57 % ]"
或者
txtovelay -k 画布 -c 天蓝色 -b 深蓝 -l 2 -t 5 -w 68 -h 50
要生成类似以下图形模型的东西?
或者甚至一些更复杂的叠加层..
基本上,这个概念在 HTML 中可能是相同的,在主网页上有一些 DIV,其位置:固定
<div id="MyDiv1" style="position:fixed; color: #00ffff; top: 0px; left: 0px; padding: 10px"></div>
<div id="MyDiv2" style="position:fixed; color: #00ff00; bottom: 0px; right: 0px; padding: 10px; text-align: right"></div>
并在脚本执行过程中时不时地执行各种命令,例如:
document.getElementById("MyDiv1").innerHTML = "Step 5: Installing NET-TOOLS package in progress..<br>-------------------------"
document.getElementById("MyDiv2").innerHTML = "[Completition: 57 % ]"
答案1
是的,你可以做这些事情。只关注如何将彩色文本放置在特定位置的问题,一种直接但有点低级的途径是使用该tput
实用程序。tput
有许多命令可以在数据库的帮助terminfo
下操作终端屏幕。例如,tput cup 23 4
将光标移动到终端的第 23 行、第 4 列。其他一些例子:
tput ed # clear to end of screen
tput setaf 2 # set foreground color to bright green
tput cubl # move cursor left one space
tput rev # turn on reverse video mode
tput sc # save the cursor position
tput rc # restore the cursor position
您可能还会发现该stty
实用程序的用途。例如,如果您想确定当前屏幕的尺寸,您可以这样做stty size
。
我之前为我的一些实用程序构建了一个粗略的“GUI”,将屏幕分为两个部分。顶部是固定高度的标题。底部包含(滚动)命令输出。我仅使用 Bash 脚本和tput
+来完成此操作stty
。我通过反复试验发现了很多,但是网上有一些很好的资源,例如http://linuxcommand.org/lc3_adv_tput.php
参见man tput
和man 5 terminfo
。对于后者,您需要向下滚动到预定义功能特别是部分。
可能有更高级别的抽象术语信息基于屏幕操作,但如果你有相对简单的要求tput
是一个不错的选择。 (我相信tput
这是恩诅咒另一个答案中提到的软件包。)
编辑:我应该补充一点,因为听起来您希望所有屏幕上都有这些功能,所以您可以通过编写一个 shell 脚本来实现这一点,该脚本使用tput
如上所述的方法并将环境变量指向PROMPT_COMMAND
该脚本,以便每次提示时都会调用它神清气爽。如果您想要更频繁的刷新,那么您必须让一些进程在后台运行,同时仍然连接到屏幕。这超出了我在这个答案中试图咬住的内容。