用stty命令设置Terminal的行为模式和控制字符

风行水上 @ 2012-01-20 22:24:12
标签:

    stty命令用于设置terminal的行为模式和控制字符。

    设置如何删除字符

    如果设置了stty erase ^H,则用退格键(Backspace)删除字符。

    如果设置了stty erase ^?,则用删除键(Delete)删除字符。

    如果设置了stty echoe,则用退格键删除字符时,屏幕上的字符也会消失——这是我们常见的情况。

    但如果设置了stty -echoe,则用退格键删除字符时,屏幕上被删除的字符不会立即消失。

    "echoe"和"-echoe"其实是一组相反的设置。

    ASCII字符中的控制字符

    上面的"^H"和"^?"其实是一些预定义的特殊ASCII字符。

    • ^H: BS, Backspace
    • ^?: DEL
    • ^M: Carriage Return (回车)
    • ^J: Line Feed (换行)
    • ^I: Tab
    • ^[: Escape
    • ^G: bell, BEL
    • ^@: NUL

    参见 Control Character @ Wikipedia

    是否回显用户输入

    如果设置了stty -echo,会发现用户输入的命令不再显示在显示屏上。恢复到“正常”模式用stty echo重新设置。

    快速删除当前命令行

    通常默认设置里都有stty kill ^U,这意味着你可用Ctrl+U快速删除当前命令行的内容。

    查看当前设置

    用命令stty -a可以显示当前的所有设置。

    intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = ; eol2 = ; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
    werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
    -parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
    -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel
    opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
    isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
    

    其中:

    • eof : 输入结束
    • erase : 向后删除字符
    • intr : 中断当前程序
    • kill : 删除整条命令
    • quit : 退出当前程序
    • start : 启动屏幕输出
    • stop : 停止屏幕输出
    • susp : terminal stop 当前程序。

    有时屏幕无缘无故地没响应了,那也许是你按了 stop 对应的按键(比如 ^S,即Ctrl+S)了。

    常用的控制字符

    • ^D: EOF,结束用户输入
    • ^C: 中断当前程序
    • ^U: 删除当前命令行

    提示用户输入密码而不回显

    引自Wikipedia的一段例程,提示用户输入密码而不回显,就像登录shell时那样。

    #!/bin/bash
    # Reading a password without echoing it while typed
    
    old_term_settings=$(stty -g)        # 保存 stty 状态
    stty -echo                          # 关闭屏幕回显
    read -p 'Password: ' secret_passwd  # 或者: echo -n 'Password: '; read secret_passwd
    
    echo
    echo Your password is ${secret_passwd}.
    
    stty "$old_term_settings"           # 恢复 stty 状态
    

    网络资源

    标签:

      分享到:
      comments powered by Disqus

      29/32ms