Linux命令之stty
Posted 浮沉一梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux命令之stty相关的知识,希望对你有一定的参考价值。
用途说明
stty命令用于显示和修改终端行设置(change and print terminal line settings)。
常用参数
stty命令不带参数可以打印终端行设置,加上-a参数可以打印得更详细些。
stty size可以显示终端的大小,即行数和列数。
stty命令还可以更改终端行的设置,格式如下:
stty SETTING CHAR
其中,SETTING可以是如下
eof : 输入结束,文件结束,默认为Ctrl+D。比如:用cat >file来创建文件时,按Ctrl+D来结束输入。
erase : 向后删除字符,擦除最后一个输入字符,默认为Ctrl+?。注意默认情况下退格键Backspace不是删除字符。
intr : 中断当前程序,默认为Ctrl+C。
kill : 删除整条命令,删除整行,默认为Ctrl+U。
quit :退出当前程序,默认为Ctrl+\或Ctrl+|。
start : 启动屏幕输出,默认为Ctrl+Q。
stop :停止屏幕输出,默认为Ctrl+S。
susp : terminal stop当前程序,默认为Ctrl+Z。这样当前进程就会变成后台进程了。
werase:删除最后一个单词,默认为Ctrl+W。
stty命令还有一些其他用法,如:
stty -echo 关闭回显。比如在脚本中用于输入密码时。
stty echo 打开回显。
使用示例
示例一 打印终端行设置
[[email protected] ~]# stty
speed 38400 baud; line = 0;
-brkint -imaxbel
[[email protected] ~]# stty -a
speed 38400 baud; rows 41; columns 132; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol =
<undef>; eol2 = <undef>; swtch = <undef>; start = ^Q;
stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -cdtrdsr
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
[[email protected] ~]#
示例二 打印当前终端的大小(行数和列数)
[[email protected] ~]# stty size
41 132
示例三 设置退格键Backspace的删除行为
在默认情况下,我们按退格键Backspace时,会在屏幕上回显^H,而不是把前一个字符删除。比如使用sftp/ftp/sqlplus/ij等命令时,就会碰到这种情况。我们可以使用stty命令把Backspace的行为变成删除前一个字符。
[[email protected] ~]# sftp 192.168.6.12
Connecting to 192.168.6.12...
[email protected]‘s password:
sftp> get abc^H^H^H^H
Couldn‘t stat remote file: No such file or directory
File "/root" not found.
sftp> quit
[[email protected] ~]#
[[email protected] ~]# stty erase ^H
[[email protected] ~]# sftp 192.168.6.12
Connecting to 192.168.6.12...
[email protected]‘s password:
sftp> get abc
Couldn‘t stat remote file: No such file or directory
File "/root/abc" not found.
sftp> quit
[[email protected] ~]#
示例四 在vi编辑文件时按Ctrl+Q来结束终端僵死的局面
[[email protected] ~]# vi 1.txt
1
2
3
Ctrl+S
~
注:按了Ctrl+S之后,就会禁止屏幕输出,从而出现终端僵死的情况。
这个时候,只要按Ctrl+Q就会结束这种局面,因为它会允许屏幕输出。
Ctrl+Q
示例五 在bash脚本中与tty命令配合使用
在下面的脚本中,先取得终端文件名称,以判断脚本是否运行在交互式方式还是在管道方式。
#!/bin/sh CONSOLE_INPUT=$(tty) echo "CONSOLE_INPUT=$CONSOLE_INPUT" COMMAND_LINE="java -Xmx640m -classpath .:lib/hyjc.jar:lib/log4j-1.2.15.jar:lib/commons-logging-1.1.1.jar:lib/proxool-0.9.0RC3.jar:lib/mysql-connector-java-5.1.10-bin.jar:lib/poi-3.5-ZHY-20091107.jar:lib/jdom-1.1.jar hyjc.sql.DBCLI MhrDB.properties MhrDB" if [ "$CONSOLE_INPUT" == "not a tty" ]; then $COMMAND_LINE elif [ "$(whereis rlwrap)" == "rlwrap:" ]; then stty erase ^H $COMMAND_LINE else rlwrap -f jdb.rlwrap $COMMAND_LINE fi
转自:http://codingstandards.iteye.com/blog/826924
附: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)
以上是关于Linux命令之stty的主要内容,如果未能解决你的问题,请参考以下文章