Bash-Autovervollständigung schlägt mit Platzhalter fehl

Bash-Autovervollständigung schlägt mit Platzhalter fehl

bashAuf diesem System wird Folgendes verwendet :

Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u4 (29.02.2016) x86_64 GNU/Linux

Der Ablauf:

cd /tmp
touch test1.txt && touch test2.txt && touch test3.txt
ls test [tab][tab]

Zeigt an:

test1.txt test2.txt test3.txt

unterhalb der Befehlszeile.

So erwarte ich, dass bashsich die automatische Vervollständigung verhält.

Aber wenn ich tippe:

ls test* [tab][tab]

(erwarte das gleiche Ergebnis) Ich bekomme nur (d. h. die Autovervollständigung wird ausschließlich erweitert zu):

test1.txt

Das Platzhalterzeichen ( *) am Ende macht also test[23].txt„unerreichbar“. Ich bin ziemlich sicher, dass die beiden Sequenzen in früheren Versionen von Bash dieselben Ergebnisse lieferten – zumindest auf meinem Computer.

Hat sonst noch jemand dieses Problem? Ist das eine Standardeinstellung (z. B. in Debian 8), die geändert werden kann? (Ich habe versucht, verschiedene Shell-Parameter zu setzen und aufzuheben, shoptaber ohne Erfolg).

Antwort1

Nun, die Lösung, die für mich funktioniert, ist diese: in ~/.bashrchatte ich die Zeilen

# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if ! shopt -oq posix; then
   if [[ -f /usr/share/bash-completion/bash_completion ]]; then
      . /usr/share/bash-completion/bash_completion
   elif [[ -f /etc/bash_completion ]]; then
      . /etc/bash_completion
   fi
fi

Das ist der Block, von dem ich dachte, er kümmert sich um die automatische Vervollständigung. Nachdem ich ihn auskommentiert und eine neue Shell gestartet habe, funktioniert er nicht nur, sondern ist wieder so, wie ich es gewohnt bin!

Ich bin mir immer noch nicht sicher, was die if-Klausel bedeutet, aber ich werde nicht versuchen, es zu reparieren, solange es funktioniert.

verwandte Informationen