Ich verwende unter anderem Bash 4.2.37 unter Linux Mint 14.
Wenn ich den Namen einer Umgebungsvariablen durch Eingabe automatisch vervollständige Tab, wird er auf den Namen der Variablen erweitert, gefolgt von einem Leerzeichen.
Wenn der Wert der Variablen zufällig ein Verzeichnisname ist, möchte ich, dass er auf den Namen der Variablen erweitert wird, gefolgt von /
.
Zum Beispiel, wenn ich tippe:
$ ls $HOM<tab>
es erweitert sich zu:
$ ls $HOME _
Dabei _
markiert die Position des Cursors. Das Problem ist, dass ich dann normalerweise weiterhin den Namen einer Datei oder eines Verzeichnisses unter meinem Ausgangsverzeichnis eingeben möchte, was bedeutet, dass ich backspaceund dann eingeben muss /
.
Daher möchte ich Folgendes erweitern:
$ ls $HOME/_
Das gleiche passiert, wenn ich den gesamten Variablennamen eingegeben habe. nach ls $HOME
, tabfügt ein Leerzeichen ein , und ich mag es hinzuzufügen /
.
(Und natürlich möchte ich nicht, dass ein /
Wert hinzugefügt wird, wenn der Wert der Variablen kein Verzeichnisname ist.)
Gibt es eine Möglichkeit, Bash anzuweisen, sich so zu verhalten, wie ich es möchte, entweder über Bash-Befehle oder durch Aktualisieren meiner $HOME/.inputrc
?
Hinweis: Ich suche speziell nach einer Möglichkeit, mich so zu tabverhalten, wie ich es möchte. Möglichkeiten, dasselbe Verhalten mit verschiedenen Tastenanschlägen zu erreichen, wären interessant, würden aber meine Frage nicht beantworten.
(Ich habe /etc/profile.d/bash_completion.sh
mein System deaktiviert , weil es schlecht interagiert set -o nounset
. Ein schnelles Experiment zeigt, dass dies für meine Frage wahrscheinlich nicht relevant ist.)
Übrigens macht tcsh dies: Bei einer gegebenen Umgebungsvariablen $FOOBAR
wird die Eingabe auf $FOOBA<tab>
erweitert, $FOOBAR/
wenn sie auf ein Verzeichnis verweist $FOOBAR
(mit einem Leerzeichen), wenn dies nicht der Fall ist. Nein, das reicht nicht aus, um mich zu überzeugen, zu tcsh zurückzukehren. zsh macht das auch.