Nach einem kürzlichen Update (Ubuntu 12.04 LTS) ist TAB complete in der Befehlszeile langsam. Nach der Eingabe eines Teilbefehls (z. B. evi [TAB]
) oder eines Teildateinamens (z. B. ) bleibt evince somedocu[TAB]
die Shell manchmal, aber nicht immer, einige Sekunden lang hängen.
Persönlich würde ich eine weniger leistungsstarke automatische Vervollständigung einer langsamen vorziehen. Gibt es eine einfache Lösung?
Bearbeiten: Zusätzliche Informationen zu Kommentaren:
PATH ist ziemlich normal. ~ / bin hat einige Bash-Skripte
$ echo $PATH /home/USERNAME/bin:/usr/local/bin:/usr/bin:/bin:/usr/games
Die Anzahl der Dateien im Arbeitsverzeichnis beträgt weniger als 100.
- Die Autocomplete-Funktion war nach ungewöhnlichen Festplattenaktivitäten (System-Upgrade) besonders langsam. Es ist daher möglich, dass das erneute Lesen von / usr / bin und anderen Verzeichnissen die Verzögerung verursacht hat.
bash
autocomplete
Jan
quelle
quelle
Antworten:
Ich weiß nicht, wie man das behebt - es gibt alles Mögliche, was zu Verzögerungen führen kann. Aber ich kann ein paar Tipps zur Untersuchung anbieten.
Vermutlich gibt es irgendwo in einem Suchpfad (
$PATH
oder an einem Ort, an dem bash nach Abschlussdaten sucht) ein Verzeichnis , das sich auf einem Dateisystem befindet, das nur langsam reagiert. Normalerweise sind Remote-Dateisysteme langsam, es kann sich aber auch um eine fehlerhafte Festplatte, einen nicht mehr funktionierenden FUSE-Treiber usw. handeln.Der erste zu untersuchende Schritt besteht darin
set -x
, eine Ablaufverfolgung der Befehle abzurufen, die die Shell ausführt, um die Vervollständigungen zu generieren. Beobachten Sie, wo es pausiert.Wenn das nicht genug Informationen gibt, bringen Sie die großen Kanonen. Notieren Sie die Prozess-ID der Shell (
echo $$
). Führen Sie in einem anderen Terminal Folgendes ausstrace -f -s9999 -p$$
(oder das Äquivalent von strace, wenn Sie mit einer anderen Unix- Version arbeiten ). Strace listet die vom Prozess ausgeführten Systemaufrufe auf. Sehen Sie nach, ob der Zugriff auf Dateien zu sein scheint, auf die er nicht zugreifen sollte, oder ob der Zugriff auf einige Dateien langsam ist. Durch Hinzufügen der Option-T
zurstrace
Befehlszeile wird die für jeden Systemaufruf aufgewendete Zeit angezeigt.quelle
set -x
, was für ein cooler Befehl. Sehr "Hacker-Modus beschäftigt"set +x
, um zum normalen Nicht-Debug-Modus zurückzukehrenWenn Ihre * nix-Box als LDAP-Client eingerichtet ist, besteht möglicherweise dieses Problem, auch wenn Sie als lokaler Benutzer angemeldet sind.
Langweilige Debug-Info: Beim Debuggen mit habe
set-x
ich die Vervollständigung gefunden, die hängen geblieben ist bei:Bestätige: Ich bestätige das mit
ls ~*
dem auch hing. Es stellte sich heraus, dass mein ldap-Server träge war, aber das sollte Dinge wie die Bash-Vervollständigung und ls nicht beeinflussen!Lösung: Aha, es gibt einen Bug gegen Bash-Completion + LDAP, der in einer neueren Version behoben wird, und einen einfachen Patch, wenn Sie nicht warten möchten. Die Tab-Vervollständigung geht wieder schnell, hurra!
Hier ist das Patchfile für den Fall, dass der Link wegfällt. Es entgeht lediglich dem ~ in den Zeilen 545 und 547:
Sie müssen die aktuelle SSH-Sitzung beenden und sich erneut anmelden, damit dieser Patch wirksam wird.
quelle
Versuchen Sie, die Bash-Vervollständigung erneut zu installieren
Für mich ist dies in Ubuntu 18.04.3 LTS behoben
quelle
Einige Leute verwenden auch zusätzliche Auto-Vervollständigungsfunktionen wie Git-Bash-Auto-Vervollständigung . Die Verlangsamung der Bash-Vervollständigung kann eine Folge des schlechten Verhaltens dieser zusätzlichen automatischen Vervollständigungsfunktionen sein.
In meinem Fall war es Git Bash Auto-Vervollständigung. Mein öffentlicher Git-Schlüssel wurde aktualisiert, sodass ein fehlgeschlagener Authentifizierungsversuch einen Hang verursachte. Nachdem ich die automatische Vervollständigung entfernt hatte, war es wieder schnell. Meine Lösung bestand also darin, meinen Schlüssel zu reparieren und wieder zu aktivieren.
quelle