Auf einem Remotecomputer mit Bash-Version „3.2.51(1)-Release“ (Betriebssystem: SUSE Linux Enterprise Server 11.1 (x86_64)) konnte ich keine normale Tab-Vervollständigung mit Variablennamen durchführen. Ich möchte beispielsweise Folgendes eingeben:
echo $OLDPWD/
dann kann ich am Ende des Schrägstrichs „Tab“ drücken und der Variablenname wird zum alten Verzeichnisnamen (vor dem letzten cd
oder pushd
Befehl) erweitert. Dies funktioniert auf meinem eigenen Laptop (Debian 7, Bash 4.2.37(1)-Release). Warum sollte es in dieser SLES-Bash-Shell nicht funktionieren?
Ähnlich verhält es sich, wenn ich
echo $OLDP
und dann am Ende des „P“ „Tab“ drücken, würde Bash dies zu vervollständigen $OLDPWD
. Dies würde auch in SLES 11 Bash nicht passieren.
Welche Steuervariablen (Shopt? Set?) beeinflussen dieses Verhalten?
Antwort1
shopt -s direxpand
wird in Bash 4.2 echo $HOME/<tab>
erweitert echo /home/matt/
. In Bash 4.1 sollte dies die Standardeinstellung sein.
Ich finde, das bash-completion
kann wirklich alles durcheinander bringen. Ich deinstalliere bash-completion
oder starte es immer complete -r
, um sicherzustellen, dass die einzelnen Vervollständigungsregeln den Standardvervollständigungen nichts Dummes antun.
Wenn $OLDPWD
tatsächlich festgelegt ist, echo $OLDP<tab>
sollte es auf erweitert werden echo $OLDPWD
. Ich weiß nicht, was das verhindern würde.
Antwort2
Versuchen Sie C-x $
stattdessen, TAB
mögliche Variablenvervollständigungen (nichts anderes) explizit anzufordern.
Antwort3
Überprüfen Sie die Antwort für urxvt - Tabulatortaste zum Erweitern von Umgebungsvariablenvon Dmitri Alexandrow.
„Hier geht es um die Direxpand-Option.
$ shopt -s direxpand und $FOO_PATH/
wird um TAB erweitert"