【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)

posted @ 2020-01-09 15:50  郭大侠1  阅读(5551)  评论(0编辑  收藏  举报