Linux 终端视窗大小设置详解:linux-command 仓库中 resize 命令的完整使用指南
Linux 终端视窗大小设置详解:linux-command 仓库中 resize 命令的完整使用指南
导读
resize 是 Linux 系统设置类命令,专门用于调整虚拟终端机(如 telnet、SSH 会话)的视窗大小,并通过输出对应的 shell 赋值语句同步更新终端环境变量 COLUMNS 与 LINES。本文基于 linux-command 仓库中 resize 命令文档 展开,完整覆盖语法、选项、三种典型用法及输出原理,并结合作者仓库的索引数据与关联命令(stty、tput)给出可复现的实战方案。读完本文,你将掌握如何在 C Shell 与 Bourne Shell 环境下正确调用 resize,理解它为何输出赋值语句,以及如何在脚本中利用 -s 参数精确控制终端尺寸。
resize 命令是什么
resize 命令 用于设置终端机视窗的大小。执行 resize 指令可以设置虚拟终端机的视窗大小,并将新的尺寸以 shell 可识别的变量赋值语句输出到标准输出,从而让终端中的应用程序(如 vi、top)感知到行数(LINES)与列数(COLUMNS)的变化。
在 linux-command 仓库中,resize 被收录于 README.md 的"系统设置"命令分类之下,与 alias、chkconfig、export、ulimit 等配置类命令并列;同时在命令索引文件 dist/data.json 中登记为:
"resize": {
"n": "resize",
"p": "/resize",
"d": "命令设置终端机视窗的大小"
}
这说明 resize 在仓库中的定位是终端环境配置工具:它的"设置"动作不是直接修改终端硬件,而是将查询到的视窗尺寸翻译成当前 shell 可执行的变量赋值命令。
语法与选项
resize 的基本语法如下:
resize [-cu][-s <列数> <行数>]
各选项含义如下表:
| 选项 | 说明 |
|---|---|
-c |
就算用户环境并非 C Shell,也用 C Shell 指令(setenv 等)改变视窗大小 |
-s <列数> <行数> |
设置终端机视窗的垂直高度(行数)和水平宽度(列数) |
-u |
就算用户环境并非 Bourne Shell,也用 Bourne Shell 指令(export 等)改变视窗大小 |
要点说明:
-c与-u指定了输出语句的 shell 风格。默认情况下,resize会检测当前登录 shell 的类型,并按对应风格输出;当检测失败或需要强制时,可用这两个选项强制指定。-s用于直接指定目标尺寸:第一个数值为行数(垂直高度,即LINES),第二个数值为列数(水平宽度,即COLUMNS)。若不带-s,resize会读取终端当前的实际尺寸。
典型用法与输出分析
使用 C Shell 风格输出
当当前用户环境为 C Shell(如 csh、tcsh)时,执行:
[root@localhost ~]# resize -c
set noglob;
setenv COLUMNS '99';
setenv LINES '34';
unset noglob;
从输出可以看出,resize -c 生成的是 C Shell 语法:先用 set noglob 关闭文件名通配扩展,再通过 setenv COLUMNS '99' 与 setenv LINES '34' 设置两个环境变量,最后用 unset noglob 恢复通配行为。输出中的 99 与 34 即为当前终端视窗的列数与行数。
使用 Bourne Shell 风格输出
当当前用户环境为 Bourne Shell(如 sh、bash、ksh)时,执行:
[root@localhost ~]# resize -u
COLUMNS=99;
LINES=34;
export COLUMNS LINES;
与 C Shell 输出对应,Bourne Shell 风格使用 COLUMNS=99; 与 LINES=34; 的赋值语法,并通过 export COLUMNS LINES; 将两个变量导出为环境变量,供子进程继承。
设置指定大小
如果需要将终端视窗强制调整为指定尺寸,使用 -s 参数:
[root@localhost ~]# resize -s 80 160
此命令将终端视窗设置为 80 行、160 列。该场景常见于脚本或自动化运维中:在窗口大小无法自动同步的远程会话(如某些 telnet、串口终端)里,先执行 resize -s 再启动全屏程序,可避免界面错位。
为什么输出的是 shell 赋值语句
从上面的实例可以看到,resize 的标准输出并不是"已设置成功"这类提示,而是一段可以被当前 shell 直接执行的变量赋值语句。从输出内容可以推断其设计逻辑:resize 本身运行于子进程中,直接调用 setenv/export 无法改变父 shell 的环境变量,因此它选择把"如何设置"的命令打印出来,交由用户配合 eval 在父 shell 中执行:
eval `resize`
在 C Shell 环境中则对应:
eval `resize -c`
这样,COLUMNS 与 LINES 才能真正作用于当前交互会话。这也是 -c/-u 选项存在的意义——只有输出的语句与当前 shell 语法匹配,eval 才能正确解析。
与终端尺寸相关的其他命令
在 linux-command 仓库中,与 resize 功能相邻的命令还有:
- stty:
stty size可以直接打印出终端的行数和列数,适合快速查看而不做任何设置;而resize侧重"设置"并同步 shell 环境变量。 - tput:通过 terminfo 数据库操作终端会话,例如用
tput cols/tput lines查询终端宽度与高度;它与resize同样依赖终端能力数据库,但tput更偏重光标与文本属性控制。
日常排查终端尺寸问题时可先使用 stty size 或 echo $COLUMNS $LINES 确认当前值,再决定是否需要 resize 校正。
使用建议
- 登录远程会话(SSH/telnet)后发现
top、vi等程序显示错乱,通常是COLUMNS/LINES未同步,此时执行eval \resize`` 即可自动校准。 - 脚本中需要固定界面大小时,用
resize -s <行数> <列数>显式指定,注意参数顺序是先行数后列数,与输出语句中LINES、COLUMNS的先后顺序一致。 - 跨 shell 迁移配置时,明确使用
-c或-u保证输出语句与目标 shell 匹配,避免eval解析报错。 - 该命令的详细说明与仓库内其他 600 多个 Linux 命令文档一同收录于 command 目录,可通过 dist/data.json 索引快速检索;安装 npm 包
linux-command后,也可在 Node.js 中直接读取命令的 Markdown 原文(参见 package.json)。