shell指令碼之stty

來源:互聯網
上載者:User

標籤:

from:http://blog.chinaunix.net/uid-2522786-id-223518.html

 

UNIX系統的命令很多,但是巧妙使用命令的方法更多。隨著經驗的積累和觀察學習其他使用者的實踐,我們也可學會解決特殊問題的方法。這裡談談自己使用UNIX系統中stty命令的一些體會,希望能與你共用。
1.stty(set tty,設定tty)命令用於檢查和修改當前註冊的終端的通訊參數。UNIX系統為鍵盤的輸入和終端的輸出提供了重要的控制手段,可以通過stty命令對特定終端或通訊線路設定選項。
可以在stty命令中使用-a查看當前註冊終端的設定情況。
$ stty -a    即,在終端視窗敲入(stty -a)並斷行符號後,顯示如下:
Speed 9600 baud; line =0;intr= DEL;quit = ^;erase = ^h;kill =^U; eof = ^d;start=^q;stop=^s
-parenb -parodd cs8 -cstopb -hupcl cread -clocal -loblk
-ignbrk brkint ignpar -parmrk -inpck istrip -inlcr -igncr icrnl -iuclc
ixon ixany -ixoff
isig icanon -xcase echo echoe echok -echonl -noflsh
opost -olcuc onlcr -ocrnl -onocr onlret ofill ofdel tab3
需要時,這裡顯示的各種選擇都可以重新設定。每種終端選項都有自己的名字(如ixon),其中大多數要麼被設定要麼被清除。在stty中相應選項前冠以負號(-),該選項被清除(禁止);如果無負號,該選項被設定。
當希望修改各選擇的值時,應在stty命令中正確書寫相應選項。如命令
$ stty -ixon
將流量控制設定為OFF,而命令
$ stty ixon
則將其置為ON。 例如:在shell語句有這個句:stty -icanon min 0 time 250   用 -icanon, 設定一次完整的讀操作最小為N個字元   min N:   用 -icanon, 設定一次完整的讀操作最小為N個字元   time N:   同時用 -icanon, 設定讀逾時為十分之N秒   在stty命令中可以同時設定多個選項:
$ stty ixon 1200
該命令將終端設定為1200傳輸速率,並將流量控制置為ON。
當選項的列表較長時,應當小心所做的修改造成會話的混亂。典型的情況下,終端在設定不正確時完全不能工作。經常出現的現象是列輸出顯示或使用者的擊鍵不能被shell正確接受。有時NEWLINE可能只顯示或走一行但不回行,即使用者輸入的NEWLINE符不能被shell正確讀取。建立新註冊標識的過程通常建立了正確的stty選項,在日常使用中很少需要修改。但如果變數TERM的設定不正確或使用者希望使用新的終端或通訊渠道(如區域網路),則需要修改stty的選項。如果你在某個機器中註冊後終端操作正常,但後來因故發生了混亂,那麼最佳的解決方案是先登出然後再向系統註冊。因為註冊時系統會重新設定相應選項。還有一種不太嚴格的解決辦法是:
$ stty sane
命令sane最常出現在大多數終端的stty選項的集合中。它並不改變通訊通道的速率,但當終端發生混亂時,通常能夠產生有益的效果。命令sane可能使全螢幕應用程式(如vi)不能正確工作,而且在設定了選項sane之後,如果不能解決任何問題,就應立即登出,然後再註冊。如果終端在註冊後依然不能正確工作,使用者的註冊可能是不成功的。如果終端已經混亂,NEWLINE鍵不能結束命令列,可以用CTRL-J代替NEWLINE直到使用者執行stty sane。此時,再用CTRL-J終止stty sane,使系統復原正常。
stty命令的幾項主要選項功能為:
選項parenb使終端進行同位,-parenb則是禁止校正;
選項cs5、cs6、cs7和cs8分別將字元大小設為5、6、7和8位元;
選項300、600、1200、2400、4800、9600和19200設定傳輸速率;
cstopb和-cstopb分別設定兩個或一個停止位;
tabs使系統使用定位字元而不是空格序列,因此減少了輸出量,選項-tabs僅使用空格,當終端不能正確處理定位字元(tab)時應使用該項。
2. stty還可用於控制一些具有特殊控制功能的鍵。系統可能已經使用CTRL-D作為檔案結束符,但你可能喜歡使用CTRL-C。因此可以使用stty命令改變之:
$ stty eof c
其中c可以是你喜歡的其它特殊控制字元。
可以直接輸入控制字元,在其前面冠以反斜線和脫字元( ^)。命令
$ stty eof ^c
將CTRL-C設定為檔案結束符。這種文法形式還可以用於修改刪除符(通常為退格鍵BackSpace)和中斷符(通常為DEL鍵)。若希望將刪除符改為BACKSPACE,可以使用下列命令:
$ stty erase ^h
可以設定一個會話期,使得當自己鍵入一個退格鍵時,系統用退格、刪除和退格序列響應。此時可以看到用退格鍵覆蓋的字元從顯示中消失了,這樣更符合電腦的慣例。使用命令
$ stty echoe
可使這一特性設定為ON。
終端方式及其管理是UNIX系統中比較困難的內容之一,系統的使用者手冊中有stty選項的全部清單。在進行嘗試之前,應當查閱手冊,仔細分析,以免給你的工作帶來麻煩。   stty - 改變並列印終端行設定
    總覽
  stty [-F device] [--file=device] [SETTING]...
  stty [-F device] [--file=device] [-a|--all]
  stty [-F device] [--file=device] [-g|--save]   描述
  quot; Add any additional description here
  列印或改變終端屬性.
  -a, --all
  以可讀的格式列印當前的所有設定
  -g, --save
  以終端可讀的格式列印當前的所有設定
  -F, --file
  開啟指定的裝置,並用此裝置作為輸入來代替標準輸入
  --help
  顯示協助並退出
  --version
  顯示版本資訊並退出
  選項-在SETTING之前使用這些選項將被視為無效 星號*表明是非POSIX設定. 以下是一些系統定義了的     
     可用設定:
  特殊字元
  * dsusp CHAR CHAR表示輸入滿時,發一個停止訊號給終端
  eof CHAR
  CHAR表示一個檔案結束 (結束輸入)
  eol CHAR
  CHAR表示當前行結束
  * eol2 CHAR CHAR是另一個表示結束當前行的字元
  erase CHAR
  CHAR表示擦除最後一個輸入字元
  intr CHAR
  CHAR表示發一個中斷訊號
  kill CHAR
  CHAR表示擦除當前行
  * lnext CHAR CHAR表示輸入下一個字元
  quit CHAR
  CHAR表示發出一個退出訊號
  * rprnt CHAR CHAR表示重新整理當前行
  start CHAR
  CHAR表示在停止輸出後重新開始輸出
  stop CHAR
  CHAR表示停止輸出
  susp CHAR
  CHAR表示發送一個終端停止訊號
  * swtch CHAR CHAR表示切換到不同的外殼層
  * werase CHAR CHAR表示擦除已經輸入的最後一個單詞
  特殊設定
  N
  把輸入和輸出的傳輸速率設為N
  * cols N 通知核心終端有N列
  * columns N 與cols N 相同
  ispeed N
  設定輸入速度為N
  * line N 用行約束規則N
  min N
  用 -icanon, 設定一次完整的讀操作最小為N個字元
  ospeed N
  設定輸出速度為N
  * rows N 通知核心終端有N行
  * size 根據核心列印出終端的行數和列數
  speed
  列印出終端的速度
  time N
  同時用 -icanon, 設定讀逾時為十分之N秒
  控制設定
  [-]clocal
  關閉解調器的控制訊號
  [-]cread
  允許接收輸入
  * [-]crtscts 允許 RTS/CTS 的握手
  csN
  把字元長度設為N, N 為[5..8]
  [-]cstopb
  對每字元使用兩個停止位 (一個帶有 `-‘)
  [-]hup
  當最後一個進程關閉終端後,發一個掛起訊號
  [-]hupcl
  同 [-]hup
  [-]parenb
  在輸出中產生同位位元,並要求在輸入中也有同位位元
  [-]parodd
  設定奇數同位 (偶校正用 `-‘)
  輸入設定:
  [-]brkint
  暫停併產生中斷訊號
  [-]icrnl
  將斷行符號解釋為換行
  [-]ignbrk
  忽略中斷訊號
  [-]igncr
  忽略斷行符號符
  [-]ignpar
  忽略有同位錯的字元
  * [-]imaxbel 對一個字元產生嘟叫,但不重新整理已滿的輸入緩衝區
  [-]inlcr
  將換行解釋為斷行符號
  [-]inpck
  開啟輸入同位
  [-]istrip
  清除輸入字元的高位(第8位)
  * [-]iuclc 將大寫字元轉換成小寫字元
  * [-]ixany 使任何字元都重新開始輸出(而 不僅僅是重新輸出字元能實現此功能)
  [-]ixoff
  開啟發送開始/停止字元的開關
  [-]ixon
  開啟XON/XOFF的流量控制
  [-]parmrk
  標記同位錯誤 (使用255-0-character 字元序列)
  [-]tandem
  同 [-]ixoff
  輸出設定:
  * bsN 回退延遲, N 為 [0..1]
  * crN 斷行符號延遲, N 為 [0..3]
  * ffN 換頁延遲, N 為 [0..1]
  * nlN 換行延遲, N 為 [0..1]
  * [-]ocrnl 將斷行符號解釋為換行
  * [-]ofdel 使用刪除字元來填充,而不是用Null 字元填充
  * [-]ofill 使用填充字元,不使用定時延遲
  * [-]olcuc 將小寫字元轉換成大寫
  * [-]onlcr 將換行解釋為斷行符號-換行
  * [-]onlret 換行執行一次斷行符號
  * [-]onocr 不在第一列列印斷行符號
  [-]opost
  postprocess 輸出
  * tabN 水平tab鍵延遲, N 為 [0..3]
  * tabs 同tab0
  * -tabs 同tab3
  * vtN 垂直方向tab鍵延遲。。。, N 為 [0..1]
  本地設定:
  [-]crterase
  將擦除字元顯示為:退格-空格-退格
  * crtkill 根據echoprt和echoe的設定去除所有行
  * -crtkill 根據echoctl和echok設定去除所有行
  * [-]ctlecho 在頭部符號中顯示控制字元‘^c‘)
  [-]echo
  顯示輸入字元
  * [-]echoctl 同 [-]ctlecho
  [-]echoe
  同[-]crterase
  [-]echok
  在一個殺死字元後顯示一個換行
  * [-]echoke 同 [-]crtkill
  [-]echonl
  即使不顯示其它字元也換行
  * [-]echoprt 向後顯示在 ‘‘ 和 ‘/‘之間的擦除字元
  [-]icanon
  開啟 erase, kill, werase, 和 rprnt 這些特殊字元
  [-]iexten
  開啟 非POSIX 特殊字元
  [-]isig
  開啟中斷,退出和掛起這些特殊字元
  [-]noflsh
  在中斷和退出這些特殊字元後禁止重新整理
  * [-]prterase 同 [-]echoprt
  * [-]tostop 停止試圖寫終端的後台作業
  * [-]xcase 與icanon同時使用, 表示用`‘退出大寫狀態
  綜合設定:
  * [-]LCASE 同 [-]lcase
  cbreak
  同 -icanon
  -cbreak
  同 icanon
  cooked
  同 brkint ignpar istrip icrnl ixon opost isig icanon, eof 和 eol 字元被設為預設值
  -cooked
  同 raw
  crt
  同 echoe echoctl echoke
  dec
  同 echoe echoctl echoke -ixany intr ^c erase 0177 kill ^u
  * [-]decctlq 同 [-]ixany
  ek
  將擦除,殺死字元設為它們的預設值
  evenp
  同 parenb -parodd cs7
  -evenp
  同 -parenb cs8
  * [-]lcase 同 xcase iuclc olcuc
  litout
  同 fB-parenb -istrip -opost cs8
  -litout
  同 parenb istrip opost cs7
  nl
  同 -icrnl -onlcr
  -nl
  同 icrnl -inlcr -igncr onlcr -ocrnl -onlret
  oddp
  同 parenb parodd cs7
  -oddp
  同 -parenb cs8
  [-]parity
  同 [-]evenp
  pass8
  同 -parenb -istrip cs8
  -pass8
  同 parenb istrip cs7
  raw
  同 -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuc lc -ixany -imaxbel -opost -isig -icanon -xcase min 1 ti me 0
  -raw
  同 cooked
  sane
  同 cread -ignbrk brkint -inlcr -igncr icrnl -ixoff -iuclc -ixany imaxbel opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff 0 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke, 所有特殊字元 使用預設值.
  本命令處理串連到標準輸入的終端行.如不帶參數,則輸出傳輸速率, 行的約束規則,以及與健全 的stty相背離的設定.在設定中, CHAR 是逐字讀取的, 或是象 ^c, 0x37, 0177 或127這樣的 編碼; 特殊值 ^- 或未定義被用來禁止特殊字元.

shell指令碼之stty

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.