【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?
如果需要重啟后自動設置終端,可以將上述命令加入到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)