
bash
Auf 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 bash
sich 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, shopt
aber ohne Erfolg).
Antwort1
Nun, die Lösung, die für mich funktioniert, ist diese: in ~/.bashrc
hatte 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.