我终于打开了ssh
手机,但这样做后,我意识到我的一些古老的硬编码脚本非常特定于 80x24 分辨率。
我知道这$COLUMNS
会给我 80 分,并允许我做一些事情,但我想弄清楚在哪里可以访问我正在查看的终端的另一个维度。
我不想为我可能使用的每个终端、电话或其他硬件硬编码一套,但现在看起来这可能是最好的选择。
我的手机通过 ConnectBot 为我提供了 53x13(找不到更好的解决方案?),以防有人关心。
答案1
$COLUMNS
for rows的等价物是$LINES
.这是由一些 shell 进行设置的,例如zsh
或bash
(尽管在 的情况下bash
,仅在交互时)基于 tty 设备线路规则设置(它们本身,通常由终端仿真器设置,或者在 的情况下ssh
,sshd
由客户端提供的值设置(我不知道是否ConnectBot
发送那些))。
您应该能够在 shell 手册页中找到该信息。例如,对于zsh
: info zsh LINES
。
其他选项:
- 在某些系统上(和这将成为未来 POSIX 版本的标准),返回与一行
stty size
相同的信息。在其他情况下,它们通常会以不同系统不同的格式<lines> <columns>
显示在though的输出中。stty -a
- 通过
ncurses
的实现tput
,您可以使用tput lines
和tput cols
来获取行数和列数(当无法从终端设备检索信息时,可以回退到查询 terminfo 数据库)。 一些
xterm
类似的终端模拟器(我不知道 ConnectBot 是否属于这种情况)允许您通过一些转义序列(\e[18t
)查询终端大小。例如,与zsh
:IFS=";" read -sd t $'ignore?\e[18t' lines cols
将尺寸存储在
$lines
和中$cols
。对于大多数终端,还可以使用(更常见的)转义序列来代替
\e[18t
转义序列,将光标移动到屏幕的右下角并查询那里的光标位置。这就是resize
实用程序附带的xterm
实际功能,可用于将 tty 设置与该设置对齐,并为那些尚未自行执行此操作的 shell 设置环境变量$LINES
:$COLUMNS
eval "$(resize -u)"
答案2
stty size
输出当前终端的行数和列数;要提取行数,请仅保留第一个字段:
stty size | cut -d\ -f1