列的终端宽度是多少?

列的终端宽度是多少?

在 中man bash,我看到环境变量COLUMNS是终端宽度。我使用了它的不同值,但就字符数而言,它似乎不是实际的终端宽度:

$ dpkg -l | grep mozilla
ii  rhythmbox-mozilla                      2.96-0ubuntu4.3                         Rhythmbox Mozilla plugin
ii  totem-mozilla                          3.0.1-0ubuntu21.1                       Totem Mozilla plugin
$ echo $COLUMNS
135
$ COLUMNS=13 dpkg -l | grep mozilla
ii  totem-mozilla  3.0.1-0ubuntu2 Totem Mozilla plugin
$ COLUMNS=1 dpkg -l | grep mozilla
ii  totem-mozilla  3.0.1-0ubuntu2 Totem Mozilla plugin
$ COLUMNS=100 dpkg -l | grep mozilla
ii  rhythmbox-mozilla   2.96-0ubuntu4.3     Rhythmbox Mozilla plugin
ii  totem-mozilla       3.0.1-0ubuntu21.1   Totem Mozilla plugin
$ COLUMNS=200 dpkg -l | grep mozilla
ii  rhythmbox-mozilla                            2.96-0ubuntu4.3                              Rhythmbox Mozilla plugin
ii  totem-mozilla                                3.0.1-0ubuntu21.1                            Totem Mozilla plugin

列的终端宽度是多少?谢谢。

答案1

COLUMNS是 bash 设置的变量,并不意味着您手动设置的变量。默认情况下它也不导出,因此 shell 启动的应用程序甚至看不到它。

那是为了什么?它包含终端模拟器的字符宽度。它的垂直等效值为LINES.它们都由selectshell 内置使用。该select内置项用于向用户呈现他们可以选择的项目列表。然后它尝试显示该列表,使其适合终端。示例如下:

使用 35x50 终端窗口:

$ select foo in a b c d e f g h i j k l m n o p q r s t u v w x y z; do echo foo="$foo"; done
1) a    7) g  13) m  19) s  25) y
2) b    8) h  14) n  20) t  26) z
3) c    9) i  15) o  21) u
4) d   10) j  16) p  22) v
5) e   11) k  17) q  23) w
6) f   12) l  18) r  24) x
#? 

使用 100x10 终端窗口:

$ select foo in a b c d e f g h i j k l m n o p q r s t u v w x y z; do echo foo="$foo"; done
1) a    3) c   5) e   7) g   9) i  11) k  13) m  15) o  17) q  19) s  21) u  23) w  25) y
2) b    4) d   6) f   8) h  10) j  12) l  14) n  16) p  18) r  20) t  22) v  24) x  26) z
#? 

答案2

$COLUMNS给出终端宽度。关于使用 with dpkg -l,您应该查看最长的行(即不要使用,grep因为它可能会丢弃该行)。当然,如果$COLUMNS太小,比如1或13,就无能为力了。

编辑:如果dpkg -l输出未连接到终端,例如当管道到 grep 时,dpkg 使用基于最长字段的列大小;因此输出可能比终端更宽。如果您想考虑终端宽度,请使用:

COLUMNS=$COLUMNS dpkg -l | grep ...

请注意,shell 变量$COLUMNS默认情况下不导出(即不是环境变量),并且具有作为 dpkg 的环境变量COLUMNS=$COLUMNS提供的效果。COLUMNS

相关内容