【1.2】shell基礎——stty erase解決按backspace出現^H的情況


【1】tty的介紹

Linux tty命令用於顯示終端機連接標准輸入設備的文件名稱。

在Linux操作系統中,所有外圍設備都有其名稱與代號,這些名稱代號以特殊文件的類型存放於/dev目錄下。你可以執行tty(teletypewriter)指令查詢目前使用的終端機的文件名稱。

語法

tty [-s][--help][--version]

參數說明

  • -s或--silent或--quiet 不顯示任何信息,只回傳狀態代碼。
  • --help 在線幫助。
  • --version 顯示版本信息。

實例

顯示當前終端

# tty /dev/pts/4


【2】stty是什么

stty其實就是 set tty

【3】stty erase 使用方法

【3.0】基本用法

其中:

  • eof : 輸入結束
  • erase : 向后刪除字符,
  • intr : 中斷當前程序
  • kill : 刪除整條命令
  • quit :退出當前程序
  • start : 啟動屏幕輸出
  • stop :停止屏幕輸出;
  • susp : terminal stop當前程序。

【3.1】查看當前所有終端設置 stty -a

可以通過stty -a命令來查看所有的終端設置

  

 

 然后你會發現,我們在客戶端輸入的時候,用Backspace去刪除,會出現^H的字樣。

 

【3.2】何使Backspace鍵做刪除操作,而不是顯示^H?

 

在設置backspace時,最好先在shell提示符下按一下backspace鍵試一下,如果顯示^h就設置成stty erase ^h, 如果^?就用stty erease ^?

 

如果需要重啟后自動設置終端,可以將上述命令加入到profile中。

 

(1)設置解決

  一般終端連接上去,Backspace鍵並未刪除光標左面那個字符,僅僅顯示^H,而DEL鍵完成了刪除操作

    stty erase ^H 即可。

  由於終端默認ctrl + backspace 為刪除 操作很不方便,這樣設置后 直接backspace就能刪除了

(2)改回去

  如果要改回使用ctrl+backspace為刪除鍵

    stty erase ^?

 

【3.3】基本原理

A: Sun Microsystems 2001-03-08 
執行"stty -a"將看到"erase = ^?",表示此時DEL鍵對應刪除操作。 
如果正在使用xterm,可以用"tset"命令設置控制字符對應的操作。其他窗口中,假設目前使用/sbin/sh,嘗試 
$ stty erase ^H
這里^H的輸入是Ctrl-H,某些時候可能需要Ctrl-V、Ctrl-H輸入,還可以嘗試 
$ stty erase "^h" 
$ stty erase "^H" (大小寫不敏感) 
這里輸入"^H",就是兩個字符,一個^,一個H。 
同樣,如果想恢復到DEL刪除 
$ stty erase ^? 
這里^?的輸入是DEL,某些時候可能需要Ctrl-V、DEL輸入,還可以嘗試 
$ stty erase "^?" 
這里輸入"^?",就是兩個字符,一個^,一個?。 
為了永久保留這個設置,在所使用的shell初始化文件中增加設置命令,比如c shell 
的".cshrc",其他shell的".login"。

 

【4】常用案例

【4.1】在命令行下,禁止輸出大寫的方法

stty -icanon 設置一次性讀完操作,如使用getchar()讀操作,不需要按enter


stty icanon 取消上面設置

stty -a 查看 信息

stty -echo 設置命令不被顯示

stty echo 取消不顯設置

stty raw -echo

stty raw echo

stty iuclc #開啟

stty -iuclc #恢復

【4.2】在命令行下禁止輸出小寫 

stty olcuc #開啟
stty -olcuc#恢復

【4.3】打印出終端的行數和列數

stty size

【4.4】改變ctrl+D的方法

stty eof "string"
系統默認是ctrl+D來表示文件的結束,而通過這種方法,可以改變!

【4.5】屏蔽輸入顯示

就是輸入命令不在屏幕上顯示

stty -echo #禁止回顯
stty echo #打開回顯
測試方法:
stty -echo;read;stty echo;read

【4.6】忽略回車符

stty igncr #開啟
stty -igncr#恢復

 

【4.7】定時輸入

 timeout_read()

{
 
timeout=$1
 
old_stty_settings=`stty -g`  #save current settings
 
stty -icanon min 0 time 100  #set 10seconds,not 100seconds
 
eval read varname  #=read $varname
 
stty "$old_stty_settings"  #recover settings
 
}
 
更簡單的方法就是利用read命令的-t選項
 
read -t 10 varname

 

 

附: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)

 

1 ,在命令行下,禁止輸出大寫的方法
 
stty -icanon 設置一次性讀完操作,如使用getchar()讀操作,不需要按enter
 
stty icanon 取消上面設置
 
stty -a 查看 信息
 
stty -echo 設置命令不被顯示
 
stty echo 取消不顯設置
 
stty raw -echo
 
stty raw echo
 
stty iuclc #開啟

 

stty -iuclc #恢復

 


2,在命令行下禁止輸出小寫

 

stty olcuc #開啟
stty -olcuc#恢復

 


3,打印出終端的行數和列數
stty size

 


4,改變ctrl+D的方法:
stty eof "string"
系統默認是ctrl+D來表示文件的結束,而通過這種方法,可以改變!
 

 

5,屏蔽顯示
stty -echo #禁止回顯
stty echo #打開回顯
測試方法:
stty -echo;read;stty echo;read

 


6,忽略回車符
stty igncr #開啟
stty -igncr#恢復
 
7.定時輸入
 
timeout_read()
 
{
 
timeout=$1
 
old_stty_settings=`stty -g`  #save current settings
 
stty -icanon min 0 time 100  #set 10seconds,not 100seconds
 
eval read varname  #=read $varname
 
stty "$old_stty_settings"  #recover settings
 
}
 
更簡單的方法就是利用read命令的-t選項
 
read -t 10 varname

 

 

 

附: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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM