1. 程式人生 > >Linux命令之stty

Linux命令之stty

repl 位置 而不是 connector 啟動 previous dsr 根據 pass

用途說明

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]

/* */ 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] 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