Shell 采集终端信息
写shell脚本时,免不了处理当前终端的相关信息,比如说行数,列数,光标位置,设置前景/背景颜色,设置字体,等等。本文描述如何采集并处理终端设置。
要完成终端信息采集与设置,通常需要用到两款终端处理工具:tput和stty。
1. tput的功能
- 获取终端的行数和列数:
tput cols tput lines
-
打印当前终端的名字:
tpupt longname
- 设置终端背景色
其中n的取值变化如下(注意,生效与设置差一行):tput setb n
- 设置终端的前景色
其中n的取值变化如下(注意,生效与设置差一行):tput setf n
2. stty
用途说明
stty命令用于显示和修改终端行设置(change and print terminal line settings)。
常用参数
stty命令不带参数可以打印终端行设置,加上-a参数可以打印得更详细些。
stty size可以显示终端的大小,即行数和列数。
stty命令还可以更改终端行的设置,格式如下:
stty SETTING CHAR
其中,SETTING可以是如下
eof : 输入结束,文件结束,默认为Ctrl+D。比如:用cat >file来创建文件时,按Ctrl+D来结束输入。
erase : 向后删除字符,擦除最后一个输入字符,默认为Ctrl+?。注意默认情况下退格键Backspace不是删除字符。
intr : 中断当前程序,默认为Ctrl+C。
kill : 删除整条命令,删除整行,默认为Ctrl+U。
quit :退出当前程序,默认为Ctrl+\或Ctrl+|。
start : 启动屏幕输出,默认为Ctrl+Q。
stop :停止屏幕输出,默认为Ctrl+S。
susp : terminal stop当前程序,默认为Ctrl+Z。这样当前进程就会变成后台进程了。
werase:删除最后一个单词,默认为Ctrl+W。
stty命令还有一些其他用法,如:
stty -echo 关闭回显。比如在脚本中用于输入密码时。
stty echo 打开回显。
3. 实例
读取密码时,不应把密码回显在终端上,以免造成信息泄漏:
#!/bin/bash
echo -e "Please enter password: "
stty -echo
read password
stty echo
echo
echo "Password read."
执行一下: