资讯动态

Linux命令-stty(显示/修改终端行设置)

发布时间:2026/8/12 12:42:48 来源:尧图企业网站定制
Linux命令-stty显示/修改终端行设置快速参考查看当前设置核心设置回显控制特殊字符配置行规程控制终端尺寸与速度Shell 脚本中的实用模式特殊字符一览常见问题排查sttySet Teletype用于显示和修改终端设备的行规程设置。它控制着终端输入输出的各种行为——比如密码输入时是否回显、CtrlC 是否中断进程、退格键的行为等。stty是使用最频繁却没有图形界面的命令之一每次你输入密码时背后都是stty -echo在工作。快速参考stty[选项][设置...]stty-a# 显示所有当前设置stty操作的是当前终端的行规程层介于物理终端和 Shell 之间。它对用户透明的特性使其成为 Shell 脚本安全输入和终端控制的基石。查看当前设置# 显示当前设置简洁模式stty# 显示所有设置包括特殊字符stty-a# 显示所有设置BSD 格式-a 等价于 -gstty-g# 保存当前设置到变量SAVED_STTY$(stty-g)# 仅显示某类设置stty-a|head-10stty speed# 仅显示波特率stty size# 仅显示终端行列数核心设置回显控制# 关闭字符回显密码输入场景stty-echoread-p请输入密码: password sttyechoecho密码已读取# 关闭回显和回车换行stty-echo-icanonread-n1key# 读取单个字符不等待回车sttyechoicanon# 标准密码输入函数read_password(){localprompt$1passwordecho-n$promptstty-echoreadpassword sttyechoechoREPLY$password}read_password密码: echo你输入了:$REPLY特殊字符配置# 设置中断信号CtrlCstty intr^C# 设置 EOFCtrlDstty eof^D# 设置挂起信号CtrlZstty susp^Z# 设置擦除字符Backspacestty erase^?# 设置终止字符通常 Ctrl\stty quit^\# 设置单词擦除CtrlWstty werase^W# 设置重新打印CtrlRstty rprnt^R# 查看特殊字符当前映射stty-a|grep-Eintr|quit|erase|kill|eof行规程控制# 规范模式行缓冲默认stty icanon# 输入以行为单位可退格编辑回车后提交# 原始模式逐字符无缓冲stty-icanon# 程序读取每个按键无需回车# 启用信号处理默认stty isig# CtrlC 发送 SIGINTCtrlZ 发送 SIGTSTP# 禁用信号处理stty-isig# CtrlC 等不再发送信号作为普通字符传递# 回显控制sttyecho# 显示输入字符默认stty-echo# 不显示输入字符stty echoe# 退格时擦除字符stty-echoe# 退格不擦除# 输出处理stty onlcr# 换行时添加回车默认stty-onlcr# 仅换行不添加回车# 输入处理将回车转为换行stty icrnl# 回车→换行默认stty-icrnl# 保留回车原样终端尺寸与速度# 查看终端行列数stty size# 输出: 24 80 行 列# 设置终端行列数stty rows40cols100# 查看终端速度波特率stty speed# 设置波特率串口终端stty9600stty115200# 脚本中获取终端尺寸COLS$(stty size|awk{print $2})ROWS$(stty size|awk{print $1})echo终端尺寸:${ROWS}行 x${COLS}列# 也可使用 tput 获取tput cols tput linesShell 脚本中的实用模式# 1. 安全的密码输入read_secure(){localpassprintfPassword: stty-echoreadpass sttyechoprintf\neval$1$pass}read_secure MY_PASS# 2. 单键菜单无需回车key_menu(){echo请选择 [y/n]: stty-echo-icanonkey$(ddbs1count12/dev/null)sttyechoicanonecho$keycase$keyiny|Y)echo选择了 YES;;n|N)echo选择了 NO;;*)echo无效选择;;esac}# 3. 终端设置在脚本异常退出时恢复trapstty echo icanon isig; echo 终端设置已恢复EXIT# 4. 临时切换为非规范模式raw_mode(){stty-echo-icanonmin1time0}restore_mode(){sttyechoicanon}traprestore_mode EXIT raw_mode# ... 逐字符读取交互逻辑 ...# 5. 显示进度条利用 stty 控制光标progress_bar(){localpercent$1width${2:-50}localfilled$((percent*width/100))localempty$((width-filled))printf\r[printf%${filled}s|tr #printf%${empty}s|tr -printf] %3d%%$percent}foriin$(seq0100);doprogress_bar$isleep0.05doneecho特殊字符一览# 查看所有特殊字符定义stty-a|grep-o\w\ \^.|column# 常用特殊字符说明# intr ^C 中断当前进程SIGINT# quit ^\ 强制退出并生成 core dumpSIGQUIT# erase ^? 删除前一个字符Backspace# kill ^U 删除整行# eof ^D 文件结束/退出 Shell# eol 未定义# eol2 未定义# swtch ^Z Shell 层切换已废弃# start ^Q 恢复输出XON# stop ^S 暂停输出XOFF# susp ^Z 挂起进程SIGTSTP# rprnt ^R 重新打印当前行# werase ^W 删除前一个单词# lnext ^V 输入下一个字面字符# discard ^O 丢弃输出常见问题排查# 问题 1: 终端输入乱了——输入不显示或显示异常# 通常是程序异常退出后 stty 设置未恢复stty sane# 恢复终端到合理状态reset# 更彻底的重置# 问题 2: 密码输入时字符可见stty-echo# 关闭回显# 问题 3: CtrlS 冻结了终端误触# 按 CtrlQ 恢复这是 XON/XOFF 流控制# 问题 4: 退格键无效stty erase^?# 问题 5: 程序退出后终端无回显sttyecho# 问题 6: 终端尺寸不对stty size# 查看当前# 调整终端窗口大小重新执行 resize 命令resizestty是那种你不知道它存在但它一直在工作的命令。每次登录终端、输入密码、按下 CtrlC 终止程序时都是stty配置在背后支撑。理解stty就是理解终端工作的底层原理。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价