не может вставить обратную косую черту с bash, python, отлично работает с csh, простаивает

У меня странная проблема с добавлением обратной косой черты (Ubuntu 10.10 и 11.04, обновление ничего не изменило). Комбинация клавиш на моей клавиатуре (шведский Thinkpad T400) - это AltGr +? Однако это, похоже, не является проблемой, так как это появляется только в некоторых программах.

Например, с помощью bash 4.2, python 2.7, python 3.2, swipl 5.10 я не могу набирать или вставлять обратную косую черту в терминал. С ash, csh, ghci, nano, vi, idle, idle3 все ведет себя как положено, я могу как печатать, так и копировать. Например, копируя

echo gurka\\\\agurk

(четыре литеральные обратные косые черты) и вставляя его в csh (а затем нажимая Enter), я получаю

$ csh
% echo gurka\\\\agurk
gurka\\agurk

, но с bash я получаю

$ echo gurkaagurk
gurkaagurk

К сожалению, я впервые заметил довольно много раз после многих новых установок, и я не могу сказать, когда он впервые появился. Я подозреваю ошибку или противоречивую конфигурацию некоторой библиотеки, общей для первой группы, но не для второй, но я не уверен в том, что делать дальше. Это очень раздражает, и я благодарен за подсказки.

ОБНОВЛЕНИЕ: поведение одинаково для konsole и всего, что вы получаете с помощью Ctrl-Alt-F1 (что я и проверил). Он также не работает с gnome-терминал и xterm, но эти два указывают на ошибку (мигает). Идеи о том, что проверять?

ОБНОВЛЕНИЕ: Проблема решена, благодаря Жилю! Это была неверная конфигурация библиотеки readline (.inputrc)

Маркус

4
задан 11 May 2011 в 23:01

1 ответ

Я думаю программы, которые Вы используете, все пользуются readline библиотекой для чтения входа. Таким образом, я предполагаю, что Вы неправильно сконфигурировали readline библиотеку. Файл конфигурации системы /etc/inputrc и файл в расчете на пользователя ~/.inputrc. Вы, вероятно, помещаете одну обратную косую черту слишком много в привязку, так, чтобы вместо того, чтобы связать команду с escape-последовательностью Вы связали ее с последовательностью, начинающейся с обратной косой черты.

Правильно: "\e[1;5C": forward-word  (escape-последовательность, отправленная Ctrl+Left)
Неправильно: "\\e[1;5C": forward-word  (\e [1; 5 C)

Если бы проблема была только в ударе, то проблематичная привязка была бы в ~/.bashrc. Отметьте это в .bashrc, та привязка выше была бы записана bind "\\e[1;5C: forward-word", с двумя обратными косыми чертами, потому что удар делает раунд расширения обратной косой черты перед передачей определения readline. (bind '\e[1;5C: forward-word' также работал бы, так как обратные косые черты теряют свое особое значение в одинарных кавычках.)

7
ответ дан 11 May 2011 в 23:01

Другие вопросы по тегам:

Похожие вопросы: