【1.2】shell基础——stty erase解决按backspace出现^H的情况
【1】tty的介绍 Linux tty命令用于显示终端机连接标准输入设备的文件名称。 在Linux操作系统中,所有外围设备都有其名称与代号,这些名称代号...
【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)