[РЕШЕНО] Backspace удаляет prompt, если в строке ввода была кириллица

Решил вынести в отдельную тему, так как вопрос не связан непосредственно с русским языком в консоли
Вопрос собственно такой, как решить проблему с тем, что если в консоли написав что-то по русски, захочешь удалить, то стираются бэкспейсом не только кириллица, но и сам промпт? Уже долго не могу найти ответ. Косяк как в tty, так и в эмуляторе терминала проявляется.
В bashrc переменная PS имеет вид PS1='[\u@\h \W]\$ '
Проблема есть только при наличии в строке ввода кириллицы, с латиницей такого нет.
Покажите еще
locale -a
.

locale
.
echo $SHELL
.
cat ~/.bashrc
.
setxkbmap -print

Может что не стандартное, никогда такого не видел
locale -a
C
POSIX
en_US.utf8
ru_RU.utf8

locale

LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=

$SHELL
/bin/bash

bashrc
PS1='\[\e[1;32m\][\u@\h \W]\$\[\e[0m\]
По сути то же самое, просто раскрасил, когда эксперементировал с решением проблемы

setxkbmap -print

xkb_keymap {
        xkb_keycodes  { include "evdev+aliases(qwerty)" };
        xkb_types     { include "complete"      };
        xkb_compat    { include "complete"      };
        xkb_symbols   { include "pc+us+ru:2+inet(evdev)+group(alt_shift_toggle)"        };
        xkb_geometry  { include "pc(pc101)"     };
};

Я ставил arch на разные машины, и везде была одна и та же проблема с этим промптом
UPD:
Косяк был в локали, поставил LANG="en_US.UTF-8", проблема решилась
vs220, спасибо за наводку!
UPD:
Косяк был в локали, поставил LANG="en_US.UTF-8", проблема решилась
vs220, спасибо за наводку!
forthgate
LANG=C
Локаль настройте
forthgate
Косяк был в локали
Это просто в данном случае.

vs220
никогда такого не видел

А вообще такое возможно - backspace может удалить всю строку и не зависимо от локали (кирилица или латиница) - это возможно при неправильном написании prompt, когда readline не знает сколько символов было выведено на экран и сколько было перехвачено при выходе терминала.
Например, проверьте для эксперимента упрощенный вариант PS1='\[\e[0;32m --->\e[m ' стерется вся строка.
Это хорошо описано и даже, если не ошибаюсь, прописано в man, правда не явно.

PS - убрал жирный шрифт, а то неправильно выводит ---
Ошибки не исчезают с опытом - они просто умнеют
vasek
forthgate
Косяк был в локали
Это просто в данном случае.
А вообще такое возможно - backspace может удалить всю строку и не зависимо от локали (кирилица или латиница) - это возможно при неправильном написании prompt, когда readline не знает сколько символов было выведено на экран и сколько было перехвачено при выходе терминала.
Например, проверьте для эксперимента упрощенный вариант …. PS1='\[\e[0;32m —>\e[m ' … стерется вся строка.
Это хорошо описано и даже, если не ошибаюсь, прописано в man, правда не явно.

PS - убрал жирный шрифт, а то неправильно выводит —

Да, я в первую очередь PS1 ковырял, а в локаль заглянуть не догадался. Мне интересно, что за значение такое LANG=C, и почему оно стояло по дефолту, когда я настраивал локаль
forthgate
что за значение такое LANG=C, и почему оно стояло по дефолту, когда я настраивал локаль
POSIX устанавливается по умолчанию если не задана другая локаль в locale.conf
Наверно просто не до конца настроили локаль
https://wiki.archlinux.org/index.php/Locale#Setting_the_system_locale
forthgate
что за значение такое LANG=C
Дополнение к пояснению vs220
Вот что пишут на этот счет.
Локализация включается путем задания строки окружения LANG:
$ export LANG={язык}
Если такой строки окружения нет, то работает значение локализации по умолчанию: LANG="C" или LANG="POSIX" (что то же самое) - минимальный набор параметров, необходимый для функционирования программ на ANSI C (ISO 9899:1990), в кодировке US-ASCII (7 bit).
Проведем для наглядности эксперимент (это всегда более понятно)
1. export LANG=C
2. echo $LANG
C
3. Набираем кирилицу и … backspace …. стерется вся строка (с латиницей нет)
4. Возвращем все обратно
export LANG=ru_RU.UTF-8
5. echo $LANG
ru_RU.UTF-8

Почему стирается кирилица - предположу, что не правильно считает readline, точно не помню, но вроде бы другое значение бит/байт ….
Ошибки не исчезают с опытом - они просто умнеют
 
Зарегистрироваться или войдите чтобы оставить сообщение.