我有一个脚本,它运行一系列编号为 001,002,003,004...等的脚本,现在一直到 041,将来会更多 - 这些脚本本身使用一些光标控件来打印进度条和其他状态信息并获取终端的宽度和高度分别为tput cols
和tput lines
。
不重写子脚本,我想保留一底部的线全面的外部脚本的状态信息。我很好奇是否有办法设置 tput 对行和列的回复。
一定有办法,因为 tmux 实现了它。我认为可能存在环境变量,但我可以看到 tmux 在运行 env 时所做的唯一更改是将 $TERM 设置为屏幕。
任何帮助将不胜感激
答案1
下面将让您自定义 tput 返回的行数和列数
export LINES=1000
export COLUMNS=1000
答案2
阅读源代码将是确定的,但对于胆小的人来说,手册是最好的选择。如果没有命令行选项,终端数据库与环境变量相结合将为您的脚本提供它可能需要的任何内容:
- 这
tput
手册页没有提到环境变量。 - 但在也可以看看部分,它指的是你curs_termcap(3x),termcap 接口(函数)手册。
- 在那一页上,格式化功能是相关的,
tputs
指向curs_terminfo(3x)
页。 - 再次(参见输出功能)没有明确提及环境变量。
寻找启蒙,你可以尝试恩诅咒手册页。
指定屏幕的宽度(以字符为单位)。在窗口环境中运行的应用程序通常能够获取它们正在其中执行的窗口的宽度。如果该
COLUMNS
值和终端的屏幕尺寸均不可用,恩诅咒使用terminfo数据库中指定的大小(即能力cols
)。
tput
现在,对于这个问题,如果手册页更直接,说用于tputs
输出,也用于setupterm
初始化,那就太好了。有时(当此信息在变更日志中很容易获得时)没有人注意到它在手册中不明确。例如这个项目来自2002年:
+ modify setupterm() to ensure that it initializes the baudrate, for
applications such as tput (report by Frank Henigman).
回到主题:
- 这初始化
curs_terminfo(3x)
描述setupterm
,注意部分 - 在正常情况下,其中
use_env
尚未被调用,setupterm
允许LINES
和COLUMNS
变量覆盖终端数据库值。 - 这
use_env
手册页重申了这一点,并评论说这些值可以从操作系统获取。 变更日志再次提到这样
tput
做(从操作系统获取值),例如,来自2007年:+ restore a call to obtain screen-size in _nc_setupterm(), which is used in tput and other non-screen applications via setupterm() (Debian #433357, reported by Florent Bayle, Christian Ohm, cf: 20070310).
总之,现有文档提供了几乎所有有关 ncurses 行为的问题的答案,但您必须阅读一些内容。