2016-01-17 19 views
1

很長一段時間,我面臨的事實是在Linux中bash有時會停下來打印我輸入的符號。當我打印時,文本沒有出現在控制檯窗口中,但實際上它已進入。我可以檢查這個打字如Ctrl-C以特殊字符或輸入,這看起來像:Bash隱形打字

^\Quit (core dumped) 
[[email protected] my]$ [[email protected] my]$ [[email protected] my]$ 

我可以用巨大的可能性重現這個當我調試我的Python腳本,並與標準輸出處理程序操作。在調試過程中,按下Ctrl + | 5例中有4例我會看到上面的問題。 爲什麼會發生這種情況,以及如何將控制檯恢復正常生活?

+2

不'重置'工作? – Ctx

+1

試試這個:按Enter開始一個新的命令,然後運行'stty sane'。如果有效,我可以添加更完整的答案。 – Chris

+0

是啊,這兩個「重置」和「stty理智」的作品! @克里斯 – academica

回答

4

爲什麼會出現這種情況?

好問題。

基本上,終端比他們看起來要複雜得多。

某些值會被終端解釋爲改變其行爲的命令序列。在作爲最終用戶交互使用期間,您通常不必擔心這一點。但有時這些命令會被意外觸發,例如如果您使用的是二進制文件,或者應用程序使用其他輸入模式並且未正確關閉。

...以及如何將控制檯恢復正常生活?

運行stty sane經常幫助:交互式終端使用

所有模式重置爲合理值。

另請參閱https://unix.stackexchange.com/a/79686/12606,其建議遵循此命令與tput rs1。我自己並沒有使用過這個最後的命令,但是在下一次stty sane本身並不能解決問題時會嘗試它。

2

終端驅動程序通常在鍵入字符時回顯這些字符。 然而,這對於ncurses(3)終端屏幕應用程序來說可能是不可取的,可能會從屏幕菜單或像vi(1)這樣的編輯器中選擇一個選項。迴應人物會弄亂屏幕並混淆typer。

所以基本上echo-ing是一個終端驅動程序選項,一個終端可以進入原始模式,應用程序負責所有輸入字符處理。

同樣,如果控制字符被髮送到終端,它可能會進入一個模式,它不會像您期望的那樣顯示字符。這是一個常見的錯誤,如果垃圾被髮送到終端。

我應該在文件中創建測試文本輸入,將stderout & stderr重定向到一個文件並使用od(1)進行調查,以確切查看輸出的字符以檢查實際發生的情況。