网站首页 活动公告 礼包中心 攻略指南
首页 >> 礼包中心
【1.2】shell基础——stty erase解决按backspace出现^H的情况

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