【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?
如果需要重启后自动设置终端,可以将上述命令加入到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)