Linux 终端视窗大小设置详解:linux-command 仓库中 resize 命令的完整使用指南

原创2026-10-02 10:36:332,185 阅读
文章标签:文档知识库教程CLI

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)。
登录后查看全文
linux-command