web-dev-qa-db-fra.com

ne peut pas insérer de barre oblique inverse avec bash, python, fonctionne correctement avec csh, inactif

J'ai un étrange problème avec l'insertion de barres obliques inverses (Ubuntu 10.10 et 11.04, la mise à niveau n'a rien changé). La combinaison de touches de mon clavier (Thinkpad suédois T400) est AltGr +?. Cependant, cela ne semble pas être le problème, car il n'apparaît qu'avec certains programmes.

Avec par exemple bash 4.2, python 2.7, python 3.2, swipl 5.10 je ne peux pas taper ni copier-coller de barre oblique inverse dans le terminal. Avec ash, csh, ghci , nano, vi, idle, idle3 tout se comporte comme prévu, je peux à la fois taper et copier-coller. Par exemple, copier

echo gurka\\\\agurk

(quatre barres obliques inverses) et en le collant dans csh (puis en appuyant sur Entrée), je reçois

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

mais avec bash, je reçois

$ echo gurkaagurk
gurkaagurk

Malheureusement, j'ai remarqué d'abord un bon moment après de nombreuses nouvelles installations et je ne peux pas dire quand il est apparu pour la première fois. Je soupçonne un bug ou une configuration conflictuelle d'une bibliothèque commune au premier groupe mais pas au second, mais je ne sais pas comment continuer. C'est extrêmement ennuyeux et je suis reconnaissant des indices.

MISE À JOUR: le comportement est le même pour konsole et tout ce que vous obtenez avec Ctrl-Alt-F1 (c'est ce que j'avais testé). Il ne fonctionne pas non plus avec gnome-terminal et xterm, mais ces deux-là indiquent une erreur (en clignotant). Des idées sur quoi vérifier?

MISE À JOUR: Le problème est résolu, grâce à Gilles! C'était une mauvaise configuration de la bibliothèque readline (.inputrc)

Marcus

4
Marcus

Je pense que les programmes que vous utilisez utilisent tous la bibliothèque readline pour lire les entrées. Donc je suppose que vous avez mal configuré la bibliothèque readline. Le fichier de configuration système est /etc/inputrc et le fichier par utilisateur est ~/.inputrc. Vous mettez probablement une barre oblique inverse de trop dans une liaison, de sorte qu'au lieu de lier une commande à une séquence d'échappement, vous l'avez liée à une séquence commençant par une barre oblique inverse.

Droite: "\e[1;5C": forward-Word (Séquence d'échappement envoyée par Ctrl+Left)
Faux: "\\e[1;5C": forward-Word (\e[1;5C)

Si le problème n'était que dans bash, la liaison problématique serait dans ~/.bashrc. Notez que dans .bashrc, que la liaison ci-dessus serait écrite bind "\\e[1;5C: forward-Word", avec deux barres obliques inverses car bash effectue une série d'expansion de barres obliques inverses avant de transmettre la définition à readline. (bind '\e[1;5C: forward-Word' fonctionnerait également, car les barres obliques inverses perdent leur signification particulière entre guillemets simples.)

7
Gilles