Shell 采集终端信息

        写shell脚本时,免不了处理当前终端的相关信息,比如说行数,列数,光标位置,设置前景/背景颜色,设置字体,等等。本文描述如何采集并处理终端设置。

要完成终端信息采集与设置,通常需要用到两款终端处理工具:tput和stty。

1. tput的功能

  • 获取终端的行数和列数:
    tput cols
    tput lines

  • 打印当前终端的名字:

    tpupt longname

     

  • 设置终端背景色
     
    tput setb n
    其中n的取值变化如下(注意,生效与设置差一行):

     

  • 设置终端的前景色
    tput setf n
    其中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."  

执行一下: