Bash $PS1 с символами Юникода, провоцирующими перекрытие ввода на виртуальной машине Debian 8 Jessie Xen

У меня есть пользовательская конфигурация bash, которую я устанавливаю на многих разных машинах, и она включает в себя пользовательскую $PS1, которая создается скриптом и заканчивается следующим образом:

\[\e[0;33m\][\!] $(if [[ $? == 0 ]]; then echo "\[\e[0;32m\]✓"; else echo "\[\e[0;31m\]✗"; fi) \[\e[1;33m\]\u\[\e[1;36m\]@\h \[\e[1;32m\]\w \[\e[1;32m\]\$\[\e[00m\]

Это немного некрасиво, но похоже, что проблема вызвана только символами ✓ и ✗; на самом деле, замена их на o и n решает проблему и делает

PS1='✓'

до сих пор терпит.

Проблема в том, что когда я набираю команду достаточно долго, чтобы достичь предела моего терминала, вместо того, чтобы продолжать на следующей строке, она перекрывает приглашение и начало команды. Самое смешное, что это только в первый раз перекрывается, потом нормально продолжается на следующей строке.

Машина, на которой это происходит, — это совершенно новая виртуальная машина Debian 8 Jessie, созданная на гипервизоре Debian 8 с Xen4.4 и набором инструментов xl. Я сделал несколько других идентичных виртуальных машин и получил тот же результат. Однако у меня нет этой проблемы ни на одной физической машине Debian, которую я пробовал (включая мой Dom0). Я также попробовал виртуальную машину Ubuntu15.04, и у нее тоже нет проблем.

Я также заметил, что эта проблема возникает как при соединении ssh, так и через последовательную консоль.

Кто-нибудь имеет представление о том, что происходит?


person toadjaune    schedule 11.01.2016    source источник
comment
Я предполагаю, что неправильный расчет длины специальных символов. Во всяком случае, это, вероятно, лучше принадлежит SuperUser.   -  person 4ae1e1    schedule 11.01.2016
comment
В этом ответе: stackoverflow.com/a/23533623/1566221 есть небольшая программа, которую вы можете использовать для проверки настроек локали. для символов Юникода. Вам нужно использовать шестнадцатеричные коды для символов, а именно 2713 (✓) и 2717 (✗). Например, должно быть написано Code 2713: width 1 punct graph print.   -  person rici    schedule 11.01.2016
comment
На самом деле, проблема, кажется, где-то здесь, она говорит мне: Code 2713: width -1 на моем удаленном компьютере, в то время как у меня есть ожидаемое Code 2713: width 1 punct graph print на моем локальном компьютере.   -  person toadjaune    schedule 22.01.2016
comment
Только что исправил мой файл i18n_ctype, и я получаю правильную ширину своего символа, однако, когда я использую его в PS1, проблемы остаются.   -  person Aleksandr Makov    schedule 24.09.2019