將終端應答字元串讀入變數
使用bash,如何將終端應答讀入沒有使用者互動的變數?以下單線仍需
Enter
按一次:echo -ne '\005' && read -s && echo ${REPLY}
另外,如何配置Xterm以發送有意義的響應
^E
?到目前為止,我見過的發送任何回复的唯一終端仿真器是PuTTY。
應答字元串可在 xterm 中使用
answerbackString
資源進行配置。該資源於1998年添加。最初返回“xterm”,自1999 年以來它預設為空字元串,因為一些使用者注意到可能濫用控制序列,這可能會向電腦發送意外命令。其他終端可能總是返回一個空字元串(konsole、mlterm、vte)。但是 rxvt(和 rxvt-unicode)返回了一個意外的響應:VT102 的設備屬性響應(一個轉義序列)。 PuTTY 返回“PuTTY”(可能是由於 xterm 的早期影響)。
在快速檢查中,Linux 控制台顯示一個“a”(可能是一個錯誤)。
由於最初的 VT100 將此作為設置/可配置功能提供,因此僅限於可列印字元。因此,rxvt/urxvt 的響應是出乎意料的。手冊頁對此做了一個晦澀的評論:
answerbackString
: string指定當 ENQ (control-E) 字元通過時,rxvt-unicode 發送給 shell 的回复。它可能包含轉義值,如**
keysym
**下面的條目中所述。(沒有承諾的描述)。
因為應答字元串的長度是未知的,讀取它的應用程序必須允許等待(以防字元在多個讀取操作中到達)。當然,ksh/bash 特有的
TMOUT
特性可以幫助編寫 shell 腳本,以及命令的-t
選項。read
對於一般用途,我避免使用stty
,例如(參見dynamic.sh
):stty raw -echo min 0 time 5
臨時設置終端,以便 a
read
將在 0.5 秒內超時,並允許它在不讀取任何字元的情況下返回。要查看設置是如何保存/恢復的,閱讀腳本會有所幫助。進一步閱讀:
- 中的
vttests
腳本xterm
,其中許多讀取終端響應字元串。stty
- 設置終端的選項(POSIX)read
- 從標準輸入(POSIX)讀取一行