Кириллица и bash

ZigZag
Сообщения: 142
Зарегистрирован: 28 окт 2015, 03:43

Сообщение ZigZag » 30 дек 2018, 19:13

Долгое время я пользовался бинарником баша версии 4.3, который был взят из одноимённого приложения в GooglePlay (которое уже сгинуло оттуда) и отсутствие нормальной работы с кириллицей воспринималось как данность. Были попытки заставить работать кириллицу через создание конфига /etc/inputrc со строками

Код: Выделить всё

set meta-flag on
set convert-meta off
set output-meta on
но кириллица при этом работала через одно место - при использовании tab в терминал выбрасывается текстовый мусор, а при использовании backspace затирается слишком много. Не так давно, я обратил внимание, что подобных проблем нет в bash'e из комплекта entware, который использовался на Zyxel'e (Омни II). Установил bash на смарт, сменил используемый шелл в sshdroid (standalone реализация dropbear'a под ведро) и кириллица зашуршала в Putty без какой либо доп. настройки. Решил проделать тоже самое в ConnectBot (под андроидом) и словил обломинго - кириллица в баше из entware вбивается точно так же в кодировке UTF-8 в восьмибитном виде (если верить гуглу) как и в bash'e из GooglePlay

Код: Выделить всё

\265\320\320\321\320\321\320\321
Что примечательно, "родной" sh (mksh) без каких-либо танцев с бубном позволяет работать с кириллицей что в ConnectBot, что в sshdroid. Наряду с клиентом ConnectBot я для чистоты эксперимента установил jackpal.androidterm.71 (Терминал) ибо в ConnectBot в выхлопе set в переменной TERM упорно значилось vt100, хотя я в настройках ConnectBot жёстко указал xterm. "Терминал" хоть и коннектился в режиме эмуляции xterm, но вместо кириллицы так же как и ConnectBot показывал в баше восимибитную петрушку (опция по умолчанию UTF-8 включена). Сразу отмечу, что .profile используемый sshdroid был идентичен тому, что был использован для bash'a в ConnectBot или "Терминале" и не содержал какой-либо специфики по работе с кодировками и прочим. Заострить на этом моменте внимание я решил про причине того, что обнаружил в Putty в выхлопе set строки манипулирующие локалью (откуда они там - отдельный вопрос)

Код: Выделить всё

LC_ALL=en_US.UTF-8
LANG=en_US.UTF-8
которые ябез особой надежды применил в ConnectBot/"Терминале" и как и ожидал, получил всё те же "8 бит" (ru_RU.UTF-8 я тоже пробовал к слову).

p.s. Пока писал сей пост, появилась мысль, как можно решить даную проблему - законнектиться через ConnectBot по ssh на локалхост, где bash корректно работает с кириллицей (и это действительно работает - кириллица в клиенте вбивалась/табилась/стиралась корректно !)

Но это конечно костыль и хотелось бы взаимодействовать с башем без дополнительного демона и понять причины проблемы )))
Keenetic Omni II [v2.13.C.0.0-1]; Zyxel Keenetic [V1.00(BFW.4.4)D0]

ZigZag
Сообщения: 142
Зарегистрирован: 28 окт 2015, 03:43

Сообщение ZigZag » 09 янв 2019, 05:35

Ну так что, совсем без вариантов ?
Keenetic Omni II [v2.13.C.0.0-1]; Zyxel Keenetic [V1.00(BFW.4.4)D0]

kaztost
Сообщения: 151
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » 09 янв 2019, 17:53

ZigZag писал(а):Источник цитаты понять причины проблемы

Если переменная TERM (а также все остальное окружение) в локальном режиме и в режиме ssh установлены одинаково, а реальная эмуляция в этих режимах разная, то это проблема эмулятора. Пишите разработчикам Connectbot, чтобы исправили эмуляцию в локальном режиме. Попробуйте другие эмуляторы, например Termux (требует Android 5 или новее).

Аватара пользователя
Александр Рыжов
Сообщения: 372
Зарегистрирован: 12 авг 2015, 13:14
Откуда: Смоленск

Сообщение Александр Рыжов » 09 янв 2019, 18:08

ZigZag писал(а):Источник цитаты в ConnectBot в выхлопе set в переменной TERM упорно значилось vt100, хотя я в настройках ConnectBot жёстко указал xterm.

Есть возможность выбрать "linux" вместо "xterm"?

kaztost
Сообщения: 151
Зарегистрирован: 16 июл 2017, 23:29

Сообщение kaztost » 09 янв 2019, 18:15

Александр Рыжов писал(а):Источник цитаты "linux"

ConnectBot в настройках поддерживает только xterm-color, xterm-256color, xterm, vt100, ansi, screen. Присвоение переменной TERM каких-то других значений вряд ли имеет смысл.

ZigZag
Сообщения: 142
Зарегистрирован: 28 окт 2015, 03:43

Сообщение ZigZag » 10 янв 2019, 02:45

kaztost писал(а):Попробуйте другие эмуляторы, например Termux (требует Android 5 или новее).
Так я же пробовал
Наряду с клиентом ConnectBot я для чистоты эксперимента установил jackpal.androidterm.71 (Терминал) ибо в ConnectBot в выхлопе set в переменной TERM упорно значилось vt100, хотя я в настройках ConnectBot жёстко указал xterm. "Терминал" хоть и коннектился в режиме эмуляции xterm, но вместо кириллицы так же как и ConnectBot показывал в баше восьмибитную петрушку (опция по умолчанию UTF-8 включена).
попробую Termux.
kaztost писал(а):Если переменная TERM (а также все остальное окружение) в локальном режиме и в режиме ssh установлены одинаково, а реальная эмуляция в этих режимах разная, то это проблема эмулятора.
В том то и дело, что в случае ConnectBot (1.9.2) и VxConnectBot при принудительном использовании xterm в настройках при коннекте локально в TERM значится vt100. При коннекте по ssh там висит xterm, как и должно быть. В "Терминале" с заданным режимом "xterm" в локальном варианте в TERM тоже висит xterm, но ситуацию это не меняет - вместо кириллицы там всё равно 8 бит.
Александр Рыжов писал(а):Есть возможность выбрать "linux" вместо "xterm"?
"Терминал" умеет, могу попробовать
Keenetic Omni II [v2.13.C.0.0-1]; Zyxel Keenetic [V1.00(BFW.4.4)D0]


Вернуться в «Entware на Android»

Кто сейчас на конференции

Всего 1 посетитель :: 1 зарегистрированный, 0 скрытых и 0 гостей (основано на активности пользователей за последние 5 минут)
Больше всего посетителей (121) здесь было 18 май 2016, 18:19

Сейчас этот форум просматривают: CommonCrawl [Bot] и 0 гостей