linux stty命令詳解
stty命令時(shí)linux下的一個(gè)命令,那么它有什么用處呢?下面由學(xué)習(xí)啦小編為大家整理了linux stty命令的相關(guān)知識(shí),希望對(duì)大家有幫助!
linux stty命令用途說明
stty命令用于顯示和修改終端行設(shè)置(change and print terminal line settings)。
linux stty命令常用參數(shù)
stty命令不帶參數(shù)可以打印終端行設(shè)置,加上-a參數(shù)可以打印得更詳細(xì)些。
stty size可以顯示終端的大小,即行數(shù)和列數(shù)。
stty命令還可以更改終端行的設(shè)置,格式如下:
stty SETTING CHAR
其中,SETTING可以是如下
eof : 輸入結(jié)束,文件結(jié)束,默認(rèn)為Ctrl+D。比如:用cat >file來創(chuàng)建文件時(shí),按Ctrl+D來結(jié)束輸入。
erase : 向后刪除字符,擦除最后一個(gè)輸入字符,默認(rèn)為Ctrl+?。注意默認(rèn)情況下退格鍵Backspace不是刪除字符。
intr : 中斷當(dāng)前程序,默認(rèn)為Ctrl+C。
kill : 刪除整條命令,刪除整行,默認(rèn)為Ctrl+U。
quit :退出當(dāng)前程序,默認(rèn)為Ctrl+\或Ctrl+|。
start : 啟動(dòng)屏幕輸出,默認(rèn)為Ctrl+Q。
stop :停止屏幕輸出,默認(rèn)為Ctrl+S。
susp : terminal stop當(dāng)前程序,默認(rèn)為Ctrl+Z。這樣當(dāng)前進(jìn)程就會(huì)變成后臺(tái)進(jìn)程了。
werase:刪除最后一個(gè)單詞,默認(rèn)為Ctrl+W。
stty命令還有一些其他用法,如:
stty -echo 關(guān)閉回顯。比如在腳本中用于輸入密碼時(shí)。
stty echo 打開回顯。
linux stty命令使用示例
示例一 打印終端行設(shè)置
[root@web ~]# stty
speed 38400 baud; line = 0;
-brkint -imaxbel
[root@web ~]# stty -a
speed 38400 baud; rows 41; columns 132; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = ; eol2 = ; swtch = ; 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
[root@web ~]#
示例二 打印當(dāng)前終端的大小(行數(shù)和列數(shù))
[root@web ~]# stty size
41 132
示例三 設(shè)置退格鍵Backspace的刪除行為
在默認(rèn)情況下,我們按退格鍵Backspace時(shí),會(huì)在屏幕上回顯^H,而不是把前一個(gè)字符刪除。比如使用sftp/ftp/sqlplus/ij等命令時(shí),就會(huì)碰到這種情況。我們可以使用stty命令把Backspace的行為變成刪除前一個(gè)字符。
[root@web ~]# sftp 192.168.6.12
Connecting to 192.168.6.12...
root@192.168.6.12'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
[root@web ~]#
[root@web ~]# stty erase ^H
[root@web ~]# sftp 192.168.6.12
Connecting to 192.168.6.12...
root@192.168.6.12's password:
sftp> get abc
Couldn't stat remote file: No such file or directory
File "/root/abc" not found.
sftp> quit
[root@web ~]#
示例四 在vi編輯文件時(shí)按Ctrl+Q來結(jié)束終端僵死的局面
[root@web ~]# vi 1.txt
1
2
3
Ctrl+S
~
注:按了Ctrl+S之后,就會(huì)禁止屏幕輸出,從而出現(xiàn)終端僵死的情況。
這個(gè)時(shí)候,只要按Ctrl+Q就會(huì)結(jié)束這種局面,因?yàn)樗鼤?huì)允許屏幕輸出。
Ctrl+Q
示例五 在bash腳本中與tty命令配合使用
在下面的腳本中,先取得終端文件名稱,以判斷腳本是否運(yùn)行在交互式方式還是在管道方式。
[plain] view plain copy#!/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