4 votes

Ne peut pas insérer un antislash avec bash, python, fonctionne bien avec csh, idle

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

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

echo gurka\\\\agurk

(quatre barres obliques littérales) et en le collant dans csh (puis en appuyant sur entrée), j'obtiens

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

mais avec bash, j'obtiens

$ echo gurkaagurk
gurkaagurk

Malheureusement, j'ai remarqué cela assez longtemps après de nombreuses nouvelles installations et je ne peux pas dire quand cela 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 suis pas sûr de ce qu'il faut faire ensuite. C'est extrêmement ennuyeux et je suis reconnaissant pour les astuces.

MISE À JOUR: le comportement est le même pour konsole et tout ce que vous obtenez avec Ctrl-Alt-F1 (ce que j'avais testé). Cela ne fonctionne pas non plus avec gnome-terminal et xterm, mais ces deux indiquent une erreur (en clignotant). Des idées sur ce qu'il faut 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

7voto

Schof Points 952

Je pense que les programmes que vous utilisez utilisent tous la bibliothèque readline pour lire l'entrée. 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 avez probablement mis un antislash de trop dans une liaison, de sorte que au lieu de lier une commande à une séquence d'échappement, vous l'avez liée à une séquence commençant par un antislash.

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

Si le problème était seulement dans bash, la liaison problématique se trouverait dans ~/.bashrc. Notez que dans .bashrc, cette liaison ci-dessus serait écrite bind "\\e[1;5C: forward-word", avec deux antislash car bash effectue une expansion des antislash avant de transmettre la définition à readline. (bind '\e[1;5C: forward-word' fonctionnerait également, car les antislash perdent leur signification spéciale à l'intérieur des guillemets simples.)

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X