Bash

如何找出我的終端為 cat 不會顯示的某些特殊程式碼發送的轉義程式碼?

  • October 26, 2021

我想知道我的終端為 Ctrl+Backspace 和 Alt+Backspace 發送了什麼,執行此操作的標準方法是cat在終端上執行並鍵入內容通常有效,但是對於像這樣的某些輸出,結果很棘手。

我猜 Alt+Backspace 正在發送\x1b\x7f(即轉義退格),但是如果我執行cat並鍵入 Ctrl+V 和 Alt+Backspace,或者只是 Alt+Backspace,會發生什麼情況是轉義將被“鍵入”並且然後立即用退格鍵將其刪除,因此看起來什麼都沒有發生。我只是通過看到我的電腦渲染了一個^[逃生幀在那裡才了解到這一點。

到目前為止,我不確定如何計算出 Ctrl+Backspace 發送的內容。即使在 bash 提示符下都刪除了一個單詞,它也不是 Ctrl+W,因為cat它在 Ctrl+W 刪除一個單詞時什麼都不做!

只需使用以下命令:

showkey -a

zsh中,有:

$ STTY='raw -echo min 0 time 40' cat -vte
^[^?

或與bash

$ s=$(stty -g); stty raw -echo min 0 time 40; cat -vte; stty "$s"
^[^?

您將看到終端輸入原始,因為它發送它並由cat -vte. 在 4 秒(40 分秒)內不輸入任何內容以停止。

您可以替換cat -vteod -An -w1 -tu1 -tx1 -to1 -ta(假設 GNUod或兼容),例如以十進制、十六進制、八進製或字元形式查看每個字節值。

 27
 1b
033
esc
127
 7f
177
del

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