題 ssh backspace刪除一個字符而不是兩個字符(utf-8符號)


我使用ssh訪問遠程計算機並運行bash命令使用標準輸入流輸入符號:

讀測試; echo $ test

可以輸入英文字母並使用退格鍵刪除它們,然後輸入其他字符並重複此步驟任意次。 但是,當我使用其他utf-8符號(如俄語符號)時,它會變成一場災難,它需要2個字節而不是1個,就像英語的那樣。 例如,我輸入:

абвгдежз

之後,我使用退格8次,並輸入其他符號:

привет

然後按Enter鍵。但是,而不是與我的上一次輸入相等的結果,我得到以下結果:

абвгпривет

這意味著8個退格鍵只刪除了4個符號。

我確實使用linux ubuntu 12.04。試過不同的遊戲機:標準遊戲機,終結者;不同類型的退格選項(如ASCII-del或Ctrl + H);將$ LC_TYPE設置為ru_RU.UTF-8,但沒有任何效果。 使用本地控制台沒有這樣的問題。 先感謝您。

更新:我也有一個關於這個問題的視頻 在youtube上觀看


2
2018-04-24 05:28


起源




答案:


你可以通過運行來解決這個問題

stty iutf8

每次你在那裡ssh服務器上。 不幸的是,這個錯誤自2005年以來就存在,但是請注 debian論壇 詳情。 您可能還想在.bashrc文件的末尾添加此行。


2
2018-04-25 01:18





你需要設置 LC_CTYPE 到UTF-8語言環境,例如 ru_RU.UTF-8 要么 en_US.UTF-8。您可以使用列出可用的區域設置 locale -a


2
2018-04-24 07:16



謝謝您的回复。我已經在客戶端和服務器端將$ LC_TYPE設置為ru_RU.UTF-8。可悲的是,這並沒有解決問題。
@VsevolodAvramov你試過嗎? export 變量?並且:你什麼時候設置的?如果你在shell中設置它,可能為時已晚...... - glglgl
@glglgl,我有以下配置:1)〜/ .ssh / config的第一行是:Host * SendEnv LC_ * 2)在/ etc / ssh / sshd_config的服務器配置中存在AcceptEnv指令3)第一行客戶端和服務器端上的〜/ .bashrc都是導出LC_CTYPE = ru_RU.utf8 4)locale -a在locale的可用選項列表中顯示ru_RU.utf8。還有什麼想法嗎?謝謝。
@glglgl我還錄製了一段視頻,證明變量LC_ENV設置正確。請 在youtube上觀看