Terminal

將終端應答字元串讀入變數

  • September 29, 2016

使用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

臨時設置終端,以便 aread將在 0.5 秒內超時,並允許它在不讀取任何字元的情況下返回。要查看設置是如何保存/恢復的,閱讀腳本會有所幫助。

進一步閱讀:

引用自:https://unix.stackexchange.com/questions/312978