该命令的重要性是什么export COLUMNS
?
我所知道的是它是一个全局变量。
我经常在 *nix 脚本的开头看到它。
答案1
它是以 ASCII 字符数衡量的当前终端窗口的宽度。
从man bash
:
COLUMNS
Used by the select builtin command to determine the terminal
width when printing selection lists. Automatically set upon
receipt of a SIGWINCH.
还有更通用的ksh
:
COLUMNS
If this variable is set, the value is used to define the
width of the edit window for the shell edit modes and for
printing select lists.
对于实际部分,请注意,当虚拟终端窗口的尺寸发生变化时,该变量的值也会发生变化。 (这是将上述内容SIGWINCH
发送到活动 shell 的时间)。
答案2
这个答案是一个猜测,因为你没有说你在什么类型的系统上看到这个,Solaris,HP-UX,AIX,BSD,Linux(什么发行版?)等等......
与用户进行诅咒式交互的 Shell 脚本过去会设置环境变量 ROWS 和 COLUMNS。
Curses 风格的交互性可以追溯到窗口系统之前,因此这些程序通常不会采取任何措施来了解 xterm 窗口的大小。因此,许多基于curses的程序使用环境变量ROWS和COLUMNS来决定如何布局它们的字段和标签。
有时,当 shell 开始在 xterm 中运行时,它们会尝试查找并设置 ROWS 和 COLUMNS 环境变量。许多较旧的 SunOS 和 Solaris 系统都会使用 /etc/profile 来执行此操作。有时,SIGWINCH(至少在 SunOS 和 Solaris 中)会用来设置 ROWS 和 COLUMNS 变量。供应商过去常常以愚蠢的方式修改 xterm,并且经常会破坏将 SIGWINCH 传递给在 xterm 中运行的进程组,并且curses 风格的交互看起来非常糟糕。
答案3
从字面上看,它告诉某些应用程序终端宽度对应的字符位置的数量。几乎所有终端都使用规则网格线和列。
LINES
最初COLUMNS
(1980年左右)内部变量在vi
和curses
.之后,外壳变量介绍了这些名字。当他们可能SunOS4 已支持,手册页中唯一提到的是curses 和ls
:
为了确定输出格式
-C
,-x
, 和-m
选项,/usr/5bin/ls
使用环境变量,COLUMNS
,以确定一个输出行上可用的字符位置数。如果未设置该变量,则术语信息数据库用于根据环境变量确定列数TERM
。如果无法获取此信息,则假定有 80 列。
也就是说,该功能来自 System V,并且似乎是后来引入的,例如,1989 年的这一承诺,对于 BSD 版本ls
。
SVr4curses(及其后继者 X/Open Curses)记录了使用环境变量LINES
,COLUMNS
可用于覆盖终端描述的终端大小值,具体取决于use_env
功能。这ncurses 手册页记录此功能。
同样,它对 shell 编程的介绍似乎来自 System V,ksh
。何时以及如何SIGWINCH
与这些变量结合起来,是难以捉摸的,可能是有争议的。然而,在当前的手边的贝壳这些套装外壳变量(不是 环境变量) 回应SIGWINCH
: ksh93
, bash
.似乎zsh
没有设置它SIGWINCH
(同样fish
)。检查Solaris 10,ksh88
没有设置变量。
bash 1.13(1993 年 9 月发布)中的旧更新日志称该SIGWINCH
功能是在 1993 年 3 月添加的,而斯文·马斯切克的页面暗示 ksh93 于同年年底左右发布。
将值放在 shell 变量中可以轻松导出(并将其更改为环境变量)和修改某些程序的行为。但该变量的原因来自于当终端尺寸难以确定时它的有用性。