如何为子流程设置列和行

如何为子流程设置列和行

我有一个脚本,它运行一系列编号为 001,002,003,004...等的脚本,现在一直到 041,将来会更多 - 这些脚本本身使用一些光标控件来打印进度条和其他状态信息并获取终端的宽度和高度分别为tput colstput lines

不重写子脚本,我想保留底部的线全面的外部脚本的状态信息。我很好奇是否有办法设置 tput 对行和列的回复。

一定有办法,因为 tmux 实现了它。我认为可能存在环境变量,但我可以看到 tmux 在运行 env 时所做的唯一更改是将 $TERM 设置为屏幕。

任何帮助将不胜感激

答案1

下面将让您自定义 tput 返回的行数和列数

export LINES=1000
export COLUMNS=1000

答案2

阅读源代码将是确定的,但对于胆小的人来说,手册是最好的选择。如果没有命令行选项,终端数据库与环境变量相结合将为您的脚本提供它可能需要的任何内容:

寻找启蒙,你可以尝试恩诅咒手册页。

  • 在关于环境,它列出了LINESCOLUMNS
  • LINES,它只是说看看COLUMNS
  • COLUMNS提供更多信息:

指定屏幕的宽度(以字符为单位)。在窗口环境中运行的应用程序通常能够获取它们正在其中执行的窗口的宽度。如果该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允许LINESCOLUMNS变量覆盖终端数据库值。
  • 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 行为的问题的答案,但您必须阅读一些内容。

相关内容