resize 是Linux/Unix系统中用于调整终端窗口大小的实用工具。它主要更新TERM环境变量中的终端尺寸信息,告诉系统当前终端窗口的行数和列数,从而确保命令输出、文本编辑器等应用程序能够正确适应终端窗口大小。
resize [选项]
| 选项 | 说明 |
|---|---|
-u |
使用Bourne shell语法设置环境变量(默认) |
-c |
使用C shell语法设置环境变量 |
-s |
显示当前终端尺寸信息,但不设置环境变量 |
-C |
使用C shell语法,与-c相同 |
-v |
显示详细输出信息 |
-h, --help |
显示帮助信息 |
-V, --version |
显示版本信息 |
自动检测并调整终端尺寸:
resize
自动检测当前终端窗口大小并更新相应的环境变量。
仅显示尺寸信息而不设置环境变量:
resize -s
输出示例:
COLUMNS=120;
LINES=30;
export COLUMNS LINES;
resize -c
输出示例(C shell语法):
setenv COLUMNS 120;
setenv LINES 30;
resize -v
显示终端检测和调整的详细过程信息。
在Bourne shell家族(bash、sh、ksh等)中使用:
eval $(resize)
执行resize命令的输出作为shell命令,立即生效。
eval `resize -c`
在C shell或tcsh中使用反引号语法执行。
| 环境变量 | 描述 | 示例值 |
|---|---|---|
COLUMNS |
终端窗口的列数(宽度) | 80, 120, 160 |
LINES |
终端窗口的行数(高度) | 24, 30, 40 |
TERM |
终端类型标识符 | xterm, xterm-256color, linux |
TERMCAP |
终端能力数据库(较旧系统) | 由resize自动更新 |
resize命令的工作原理:
/dev/tty)获取当前窗口尺寸CSI 18 t获取实际像素尺寸(如果支持)TERMCAP或TERMINFO数据库中的终端尺寸信息注意:resize命令本身不改变物理窗口大小,只更新系统对窗口尺寸的认识。
| 尺寸名称 | 列数×行数 | 典型用途 | 历史背景 |
|---|---|---|---|
| VT100标准 | 80×24 | 传统终端,默认尺寸 | DEC VT100终端标准 |
| 宽屏终端 | 120×30 | 现代宽屏显示器 | 16:9显示器普及 |
| 全屏终端 | 160×40 | 编程,日志查看 | 高分辨率显示器 |
| 小尺寸 | 60×20 | 移动设备,分屏 | 平板电脑终端 |
通过SSH连接到远程服务器后,本地终端窗口改变大小时,需要在远程会话中同步更新:
# 连接后调整本地窗口,然后在远程执行
resize
在使用vim、emacs等编辑器时,正确的终端尺寸确保代码正确显示:
# 在.bashrc或.zshrc中添加
alias rs="resize"
在脚本中确保输出格式正确:
#!/bin/bash
# 确保终端尺寸正确
resize > /dev/null 2>&1
echo "当前终端: ${COLUMNS}列 × ${LINES}行"
在图形化终端模拟器(如GNOME Terminal、Konsole)中使用:
# 多数现代终端模拟器自动处理
# 手动调整时可使用
bind '"\C-r": "resize\n"'
-u和-c选项对应不同shell家族echo "列数: $COLUMNS, 行数: $LINES"stty cols 120 rows 30echo $TERM~/.bashrc中添加:trap 'resize' SIGWINCHecho -e "\033[18t"(返回当前尺寸)sudo apt install xterm(Debian/Ubuntu)| 相关命令 | 说明 |
|---|---|
stty |
设置终端行数和列数:stty cols 120 rows 30 |
tput |
查询和设置终端能力:tput cols、tput lines |
infocmp |
显示终端能力数据库信息 |
tic |
编译终端描述文件 |
tmux |
终端复用器,有自己的尺寸管理:tmux resize-pane -L 10 |
screen |
另一个终端复用器:screen -x |
sudo apt install xtermexport TERM=xterm-256coloreval $(resize)而不是直接执行ssh -o SendEnv=COLUMNS -o SendEnv=LINES hoststty rows 24 cols 80 < /dev/ttyS0# 在 ~/.bashrc 或 ~/.zshrc 中添加
# 如果resize命令存在,则使用它
if type resize >/dev/null 2>&1; then
# 仅在交互式shell中执行
if [[ $- == *i* ]]; then
resize >/dev/null 2>&1
fi
fi
# 或者使用stty作为备选
set_terminal_size() {
if [ -t 0 ]; then
stty rows $(tput lines) cols $(tput cols)
fi
}
# 窗口大小变化时自动调整
trap 'set_terminal_size' SIGWINCH