stty命令

本文鏈接:http://codingstandards.iteye.com/blog/826924   (轉載請註明出處)

用途說明

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。有時候終端突然僵死了,可能是不小心按了Ctrl+S的緣故,因爲我們習慣性的按Ctrl+S來保存文件。
    susp : terminal stop當前程序,默認爲Ctrl+Z。這樣當前進程就會變成後臺進程了。

   werase:刪除最後一個單詞,默認爲Ctrl+W。

stty命令還有一些其他用法,如:

    stty -echo 關閉回顯。比如在腳本中用於輸入密碼時。

    stty echo 打開回顯。

輸入密碼的腳本片段:stty -echo; read var; stty echo; 或 read -s var

使用示例

示例一 打印終端行設置

[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 = <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

[root@web ~]#

 

示例二 打印當前終端的大小(行數和列數)

[root@web ~]# stty size 
41 132

 

示例三 設置退格鍵Backspace的刪除行爲

在默認情況下,我們按退格鍵Backspace時,會在屏幕上回顯^H,而不是把前一個字符刪除。比如使用sftp/ftp/sqlplus/ij等命令時,就會碰到這種情況。我們可以使用stty命令把Backspace的行爲變成刪除前一個字符。

[root@web ~]# 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 
[root@web ~]# 
[root@web ~]# stty erase ^H 
[root@web ~]# 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 
[root@web ~]#

 

示例四 在vi編輯文件時按Ctrl+Q來結束終端僵死的局面

[root@web ~]# vi 1.txt 
1
2
3
Ctrl+S 
~

注:按了Ctrl+S之後,就會禁止屏幕輸出,從而出現終端僵死的情況。

這個時候,只要按Ctrl+Q就會結束這種局面,因爲它會允許屏幕輸出。

Ctrl+Q

 

示例五 在bash腳本中與tty命令配合使用

在下面的腳本中,先取得終端文件名稱,以判斷腳本是否運行在交互式方式還是在管道方式。

 

Bash代碼  收藏代碼
  1. #!/bin/sh  
  2.   
  3. CONSOLE_INPUT=$(tty)  
  4.   
  5. echo "CONSOLE_INPUT=$CONSOLE_INPUT"  
  6.   
  7. 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"  
  8.   
  9. if [ "$CONSOLE_INPUT" == "not a tty" ]; then  
  10.         $COMMAND_LINE  
  11. elif [ "$(whereis rlwrap)" == "rlwrap:" ]; then  
  12.         stty erase ^H  
  13.         $COMMAND_LINE  
  14. else  
  15.         rlwrap -f jdb.rlwrap $COMMAND_LINE  
  16. fi  
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章