L'auto-complétion automatique des variables ajoute un espace supplémentaire à la fin

6

Lorsque j'effectue l'auto-complétion d'une variable bash, un caractère d'espacement supplémentaire est ajouté à la fin.

Donc ça:

$FO[TAB]

Devient ceci:

$FOO" " 

J'ai ajouté les guillemets afin de désigner l'espace blanc. Le problème est que certaines variables que nous utilisons sont des répertoires et que l’espace est ennuyeux car il doit être supprimé et un / doit être tapé. Est-il possible en quelque sorte de configurer un comportement comme celui-ci

Donc ça:

$FO[TAB]

Devient ceci:

$FOO/

Ou ca:

cd $FO[TAB]

Devient ceci:

cd $FOO/
JakeGould
la source
Vous voudrez peut-être voir ceci: stackoverflow.com/questions/2339246/…
devnull
Il y a plusieurs étapes à considérer: 1) Faire $FO[TAB]complète à $FOO2) étendre $FOOà sa valeur, et 3) reconnaît que la valeur est un répertoire, et pour achever ce avec un arrière /et pas d' espace. 1) est la valeur par défaut, 2) peut être accompli avec certains readlineparamètres et configuration. 3) est délicat et nécessitera au moins un travail important avec les installations d’achèvement programmables.
Chepner

Réponses:

3

Mieux vaut répondre tard que jamais!

Les noms de répertoire d’achèvement pratiques dans les variables ont été implémentés dans Bash 4.3. Bash 4.3 vérifie si une variable shell se développe en un nom de répertoire et s’ajoute /au mot comme il convient.

Zaboj Campula
la source
-2

J'ai eu le même problème sur CentOS 7 avec bash 4.2. Je n'ai trouvé aucune solution / solution de contournement sur Internet. "yum upgrade bash" n'a également pas aidé.

Finalement, j'ai décidé de compiler / installer la dernière version de bash (au moment 4.4). J'ai simplement suivi ce blog: Comment installer Bash 4.4 sur des distributions Linux

La complétion par onglets fonctionne comme prévu en 4.4. Il semble que ce soit un bug dans 4.2.

Remarque: Après "make install", le fichier exécutable se trouve dans / usr / local / bin / (/ bin / bash reste inchangé). Vous souhaitez donc ajuster / etc / passwd pour que la nouvelle version devienne le shell de connexion par défaut des utilisateurs.

HTH

chrinux
la source
1
La réponse existante indique que la mise à niveau à partir de Bash 4.2 est la solution. Vous faites référence à un blog, mais n'en incluez aucune information. Nous n'avons donc aucune idée de ce que vous avez trouvé important.
Ramhound