zoukankan      html  css  js  c++  java
  • 【1.2】shell基础——stty erase解决按backspace出现^H的情况

    【1】tty的介绍

    Linux tty命令用于显示终端机连接标准输入设备的文件名称。

    在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号以特殊文件的类型存放于/dev目录下。你可以执行tty(teletypewriter)指令查询目前使用的终端机的文件名称。

    语法

    tty [-s][--help][--version]

    参数说明

    • -s或--silent或--quiet 不显示任何信息,只回传状态代码。
    • --help 在线帮助。
    • --version 显示版本信息。

    实例

    显示当前终端

    # tty
    /dev/pts/4


    【2】stty是什么

    stty其实就是 set tty

    【3】stty erase 使用方法

    【3.0】基本用法

    其中:

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

    【3.1】查看当前所有终端设置 stty -a

    可以通过stty -a命令来查看所有的终端设置

      

     然后你会发现,我们在客户端输入的时候,用Backspace去删除,会出现^H的字样。

    【3.2】何使Backspace键做删除操作,而不是显示^H?

    在设置backspace时,最好先在shell提示符下按一下backspace键试一下,如果显示^h就设置成stty erase ^h, 如果^?就用stty erease ^?

    如果需要重启后自动设置终端,可以将上述命令加入到profile中。

    (1)设置解决

      一般终端连接上去,Backspace键并未删除光标左面那个字符,仅仅显示^H,而DEL键完成了删除操作

        stty erase ^H 即可。

      由于终端默认ctrl + backspace 为删除 操作很不方便,这样设置后 直接backspace就能删除了

    (2)改回去

      如果要改回使用ctrl+backspace为删除键

        stty erase ^?

    【3.3】基本原理

    A: Sun Microsystems 2001-03-08 
    执行"stty -a"将看到"erase = ^?",表示此时DEL键对应删除操作。 
    如果正在使用xterm,可以用"tset"命令设置控制字符对应的操作。其他窗口中,假设目前使用/sbin/sh,尝试 
    $ stty erase ^H
    这里^H的输入是Ctrl-H,某些时候可能需要Ctrl-V、Ctrl-H输入,还可以尝试 
    $ stty erase "^h" 
    $ stty erase "^H" (大小写不敏感) 
    这里输入"^H",就是两个字符,一个^,一个H。 
    同样,如果想恢复到DEL删除 
    $ stty erase ^? 
    这里^?的输入是DEL,某些时候可能需要Ctrl-V、DEL输入,还可以尝试 
    $ stty erase "^?" 
    这里输入"^?",就是两个字符,一个^,一个?。 
    为了永久保留这个设置,在所使用的shell初始化文件中增加设置命令,比如c shell 
    的".cshrc",其他shell的".login"。

    【4】常用案例

    【4.1】在命令行下,禁止输出大写的方法

    stty -icanon 设置一次性读完操作,如使用getchar()读操作,不需要按enter


    stty icanon 取消上面设置

    stty -a 查看 信息

    stty -echo 设置命令不被显示

    stty echo 取消不显设置

    stty raw -echo

    stty raw echo

    stty iuclc #开启

    stty -iuclc #恢复

    【4.2】在命令行下禁止输出小写 

    stty olcuc #开启
    stty -olcuc#恢复

    【4.3】打印出终端的行数和列数

    stty size

    【4.4】改变ctrl+D的方法

    stty eof "string"
    系统默认是ctrl+D来表示文件的结束,而通过这种方法,可以改变!

    【4.5】屏蔽输入显示

    就是输入命令不在屏幕上显示

    stty -echo #禁止回显
    stty echo #打开回显
    测试方法:
    stty -echo;read;stty echo;read

    【4.6】忽略回车符

    stty igncr #开启
    stty -igncr#恢复

    【4.7】定时输入

     timeout_read()

    {
     
    timeout=$1
     
    old_stty_settings=`stty -g`  #save current settings
     
    stty -icanon min 0 time 100  #set 10seconds,not 100seconds
     
    eval read varname  #=read $varname
     
    stty "$old_stty_settings"  #recover settings
     
    }
     
    更简单的方法就是利用read命令的-t选项
     
    read -t 10 varname

    附:Linux终端常用快捷键

    Ctrl + d       删除一个字符,相当于通常的Delete键(命令行若无任何字符,则相当于exit;处理多行标准输入时也表示EOF )

    Ctrl + h       退格删除一个字符,相当于通常的Backspace键

    Ctrl + u       删除光标之前到行首的字符

    Ctrl + k       删除光标之前到行尾的字符

    Ctrl + c       取消当前行输入的命令,相当于Ctrl + Break

    Ctrl + a       光标移动到行首(Ahead of line),相当于通常的Home键

    Ctrl + e       光标移动到行尾(End of line)

    Ctrl + f       光标向前(Forward)移动一个字符位置

    Ctrl + b       光标往回(Backward)移动一个字符位置

    Ctrl + l       清屏,相当于执行clear命令

    Ctrl + p       调出命令历史中的前一条(Previous)命令,相当于通常的上箭头

    Ctrl + n       调出命令历史中的下一条(Next)命令,相当于通常的上箭头

    Ctrl + r       显示:号提示,根据用户输入查找相关历史命令(reverse-i-search)

    1 ,在命令行下,禁止输出大写的方法
     
    stty -icanon 设置一次性读完操作,如使用getchar()读操作,不需要按enter
     
    stty icanon 取消上面设置
     
    stty -a 查看 信息
     
    stty -echo 设置命令不被显示
     
    stty echo 取消不显设置
     
    stty raw -echo
     
    stty raw echo
     
    stty iuclc #开启

     

    stty -iuclc #恢复

     


    2,在命令行下禁止输出小写

     

    stty olcuc #开启
    stty -olcuc#恢复

     


    3,打印出终端的行数和列数
    stty size

     


    4,改变ctrl+D的方法:
    stty eof "string"
    系统默认是ctrl+D来表示文件的结束,而通过这种方法,可以改变!
     

     

    5,屏蔽显示
    stty -echo #禁止回显
    stty echo #打开回显
    测试方法:
    stty -echo;read;stty echo;read

     


    6,忽略回车符
    stty igncr #开启
    stty -igncr#恢复
     
    7.定时输入
     
    timeout_read()
     
    {
     
    timeout=$1
     
    old_stty_settings=`stty -g`  #save current settings
     
    stty -icanon min 0 time 100  #set 10seconds,not 100seconds
     
    eval read varname  #=read $varname
     
    stty "$old_stty_settings"  #recover settings
     
    }
     
    更简单的方法就是利用read命令的-t选项
     
    read -t 10 varname

     

     

     

    附:Linux终端常用快捷键:

    Ctrl + d       删除一个字符,相当于通常的Delete键(命令行若无任何字符,则相当于exit;处理多行标准输入时也表示EOF )

    Ctrl + h       退格删除一个字符,相当于通常的Backspace键

    Ctrl + u       删除光标之前到行首的字符

    Ctrl + k       删除光标之前到行尾的字符

    Ctrl + c       取消当前行输入的命令,相当于Ctrl + Break

    Ctrl + a       光标移动到行首(Ahead of line),相当于通常的Home键

    Ctrl + e       光标移动到行尾(End of line)

    Ctrl + f       光标向前(Forward)移动一个字符位置

    Ctrl + b       光标往回(Backward)移动一个字符位置

    Ctrl + l       清屏,相当于执行clear命令

    Ctrl + p       调出命令历史中的前一条(Previous)命令,相当于通常的上箭头

    Ctrl + n       调出命令历史中的下一条(Next)命令,相当于通常的上箭头

    Ctrl + r       显示:号提示,根据用户输入查找相关历史命令(reverse-i-search)

  • 相关阅读:
    Linux命令-read
    pytest8-skip与xfail
    python模块-contextlib
    python中eval的使用
    python学习-面向对象(六)
    java学习-IDEA运行java程序报错
    nginx 使用SSL证书 代理https
    BC30560: “ExtensionAttribute”在命名空间“System.Runtime.CompilerServices”中不明确。
    nginx 代理相对路径使用不起
    nginx 解决不同web服务器 在同一服务器使用80端口问题
  • 原文地址:https://www.cnblogs.com/gered/p/12171896.html
Copyright © 2011-2022 走看看