bash: Variablenname wird mit Tab-Vervollständigung nicht erweitert

bash: Variablenname wird mit Tab-Vervollständigung nicht erweitert

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 cdoder pushdBefehl) 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 direxpandwird in Bash 4.2 echo $HOME/<tab>erweitert echo /home/matt/. In Bash 4.1 sollte dies die Standardeinstellung sein.

Ich finde, das bash-completionkann wirklich alles durcheinander bringen. Ich deinstalliere bash-completionoder starte es immer complete -r, um sicherzustellen, dass die einzelnen Vervollständigungsregeln den Standardvervollständigungen nichts Dummes antun.

Wenn $OLDPWDtatsä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, TABmö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"

verwandte Informationen