一、命令简介
stty 命令用于显示和修改终端(TTY)设备的设置。它允许用户查看和调整与终端输入 / 输出行为相关的各种参数,例如字符回显、行控制、流控制以及特殊控制字符(如 Ctrl+C、Ctrl+D 等)的映射。该命令对于脚本编写、终端故障排查以及自定义命令行交互体验非常有用。
二、语法格式
bash
运行
stty [选项] [设置...]基本形式:
- stty:显示当前终端的关键设置。
- stty -a 或 stty --all:以人类可读的格式显示所有当前设置。
- stty -g 或 stty --save:以 stty 可解析的格式(十六进制字符串)输出当前所有设置,便于保存和恢复。
- stty [设置]:应用指定的终端设置。
- stty [选项] [设置]:结合选项和设置使用。
三、常用选项及说明
表格
| 选项 | 说明 |
|---|---|
| -a, --all | 以易于阅读的格式打印终端的所有当前设置。 |
| -g, --save | 以机器可读的格式(一个十六进制字符串)打印当前所有设置。此输出可直接用于 stty 命令以恢复该配置。 |
| -F DEVICE, --file=DEVICE | 指定要操作的终端设备文件,而不是当前的标准输入。例如:stty -F /dev/ttyS0 speed。 |
| --help | 显示帮助信息并退出。 |
| --version | 显示版本信息并退出。 |
常用设置参数说明
stty 的设置参数通常成对出现,形如 功能 和 - 功能,分别表示启用和禁用该功能。以下是一些常见设置:
3.1 特殊控制字符
表格
| 设置 | 说明 |
|---|---|
| intr ^C | 将中断信号(SIGINT)的发送字符设置为 Ctrl+C。设置时,^C 需按字面输入(通常按 Ctrl+V,再按 Ctrl+C)。 |
| eof ^D | 将文件结束符(EOF)设置为 Ctrl+D。 |
| erase ^? 或 erase ^H | 设置退格删除字符(通常对应 Backspace 或 Delete 键)。 |
| kill ^U | 设置行删除字符(删除整行输入)。 |
| werase ^W | 设置单词删除字符。 |
3.2 输入设置
表格
| 设置 | 说明 |
|---|---|
| ignbrk / -ignbrk | 忽略 / 不忽略输入中的 BREAK 条件。 |
| brkint / -brkint | BREAK 产生 / 不产生中断信号。 |
| igncr / -igncr | 忽略 / 不忽略输入中的回车符(CR)。 |
| icrnl / -icrnl | 将输入中的回车符(CR)映射 / 不映射为换行符(NL)。 |
| ixon / -ixon | 启用 / 禁用软件流控制(XON/XOFF,Ctrl+S/Ctrl+Q)。 |
| ixoff / -ixoff | 启用 / 禁用发送 START/STOP 字符以防止输入缓冲区溢出。 |
3.3 输出与本地设置
表格
| 设置 | 说明 |
|---|---|
| echo / -echo | 启用 / 禁用回显输入字符(常用于输入密码时关闭回显)。 |
| icanon / -icanon | 启用 / 禁用规范模式(行缓冲)。禁用后,输入字符将立即可用,无需等待换行符。 |
| isig / -isig | 启用 / 禁用对特殊控制字符(intr, quit, susp)的检查。禁用后,Ctrl+C 等将无法发送信号。 |
| onlcr / -onlcr | 启用 / 禁用在输出时将换行符(NL)映射为回车 - 换行符(CR-NL)。 |
3.4 硬件 / 组合设置
表格
| 设置 | 说明 |
|---|---|
| cs8 / cs7 | 设置字符大小为 8 位或 7 位。 |
| speed | 显示当前波特率。使用 speed N 设置波特率(如 speed 115200)。 |
| rows N | 将终端行数(高度)设置为 N。 |
| cols N 或 columns N | 将终端列数(宽度)设置为 N。 |
| size | 打印终端的行数和列数。 |
四、示例用法
查看所有当前终端设置
bash
运行
stty -a保存当前终端设置并在之后恢复
bash
运行
# 保存设置到一个变量或文件 SAVED_SETTINGS=$(stty -g) # ... 在此处进行其他操作或修改设置 # 恢复设置 stty $SAVED_SETTINGS禁用回显(用于密码输入脚本)
bash
运行
#!/bin/bash echo -n "Password: " stty -echo # 关闭回显 read PASSWORD stty echo # 重新打开回显 echo echo "Password read."更改中断字符和 EOF 字符
bash
运行
# 将中断信号字符从 Ctrl+C 改为 Ctrl+X stty intr ^X # 将 EOF 字符从 Ctrl+D 改为 Ctrl+A stty eof ^A修复退格键(Backspace)或 Delete 键行为异常
bash
运行
# 尝试以下设置之一,具体取决于您的终端 stty erase ^H # 通常对应 Backspace stty erase ^? # 通常对应 Delete设置串口设备参数
bash
运行
# 配置 /dev/ttyS0 为 115200 波特率,8位数据,无校验,1位停止位 stty -F /dev/ttyS0 115200 cs8 -parenb -cstopb五、注意事项
谨慎修改: 错误地使用 stty(如 stty -echo -icanon)可能导致终端无响应或输入异常。在修改关键设置(如 isig, icanon, echo)前,建议先用 stty -g 保存当前配置。
恢复默认: 如果终端行为变得异常,可以尝试关闭终端并重新打开,或者通过另一个终端会话(如另一个终端标签)使用 stty sane 命令来恢复一组合理的默认设置。
作用范围: stty 的设置通常只影响当前终端会话或脚本执行的上下文。
字符输入: 在设置控制字符(如 intr ^C)时,^C 等不是直接键入的字符,而是需要通过键序列输入(通常先按 Ctrl+V,再按目标组合键)。在脚本中,可以使用类似 stty intr ^c 的转义形式。