Read

外殼讀取錯誤處理輸入按鍵

  • April 17, 2020

我正在安裝一個相對較新的 Linux Mint,直到現在我還沒有註意到任何重大問題,我意識到我無法使用任何互動式讀取使用者輸入的命令行工具。它沒有像我期望的那樣通過使用一行輸入來處理輸入鍵,而是將^M字元序列列印到終端並繼續提示輸入。

例如git add -p

Stage this hunk [y,n,q,a,d,j,J,g,/,e,?]? y^M

經過更多測試後,我意識到所有 shellread操作都在執行此操作(在zsh和中bash),並且sh完全無法使用。

zsh 和 bash:

$ read test
value^M^C
$

噓:

$ echo "test"^M^C
$ exit^M^M^M^C
$

我打開了一個新終端,它似乎沒有受到影響,所以我沒有被困在這裡,但我很想知道發生了什麼讓這個終端表現得像現在這樣。我會把壞掉的打開一段時間,以測試人們是否有理論。

這通常發生在將終端設置為原始輸入模式的程序意外死亡並且無法將終端設置恢復為其先前值時。

一個簡單的stty sane應該將一切重置為正常。

作為使終端“原始”的一部分,通過關閉termios設置中的標誌來禁用輸入 ( ^M, \r) 到換行 ( ^J, ) 的轉換。這也可以從命令行使用.\n``ICRNL``c_iflag stty -icrnl

像 bash 這樣的 shell 的命令行通常不受此影響,因為 bash 使自己成為終端原始並進行自己的鍵轉換(為了提供良好的行編輯功能,例如左右移動插入點,命令行歷史等),並且僅在執行其他命令時恢復預設終端設置。

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