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)

  • 相关阅读:
    5 Things Every Manager Should Know about Microsoft SharePoint 关于微软SharePoint每个经理应该知道的五件事
    Microsoft SharePoint 2010, is it a true Document Management System? 微软SharePoint 2010,它是真正的文档管理系统吗?
    You think you use SharePoint but you really don't 你认为你使用了SharePoint,但是实际上不是
    Introducing Document Management in SharePoint 2010 介绍SharePoint 2010中的文档管理
    Creating Your Own Document Management System With SharePoint 使用SharePoint创建你自己的文档管理系统
    MVP模式介绍
    权重初始化的选择
    机器学习中线性模型和非线性的区别
    神经网络激励函数的作用是什么
    深度学习中,交叉熵损失函数为什么优于均方差损失函数
  • 原文地址:https://www.cnblogs.com/gered/p/12171896.html
Copyright © 2011-2022 走看看