“导出列”有什么作用?

“导出列”有什么作用?

该命令的重要性是什么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年左右)内部变量vicurses.之后,外壳变量介绍了这些名字。当他们可能SunOS4 已支持,手册页中唯一提到的是curses 和ls:

为了确定输出格式-C,-x, 和-m选项, /usr/5bin/ls使用环境变量,COLUMNS,以确定一个输出行上可用的字符位置数。如果未设置该变量,则术语信息数据库用于根据环境变量确定列数TERM。如果无法获取此信息,则假定有 80 列。

也就是说,该功能来自 System V,并且似乎是后来引入的,例如,1989 年的这一承诺,对于 BSD 版本ls

SVr4curses(及其后继者 X/Open Curses)记录了使用环境变量LINESCOLUMNS可用于覆盖终端描述的终端大小值,具体取决于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 变量中可以轻松导出(并将其更改为环境变量)和修改某些程序的行为。但该变量的原因来自于当终端尺寸难以确定时它的有用性。

相关内容