Update im Jahr 2013: Der Großteil der Bash-Vervollständigung wurde nur bei Bedarf in Autoload-Vervollständigungen umgeschrieben. Das Kernskript ist jetzt viel heller.
Das Abschlussskript kann in Shell-Skriptstandards manchmal sehr umfangreich sein . Auf einem Server, auf den ich Zugriff habe, sind es fast 1700 Zeilen (57 KB) und das ist nur das Kernskript . In /etc/bash_completion.dgibt es ~ 200 zusätzlichen Skripte für verschiedene andere Befehle ( openssl, mutt, mount...) in Höhe von insgesamt 25.537 Zeilen oder 1,2 MB. Jedes Skript prüft, wenn es bereitgestellt wird, ob ein Befehl tatsächlich verfügbar ist, bevor Abschlusshandler definiert werden. In diesem Fall ~ 330 Mal, wobei jeweils $PATHnach einer ausführbaren Datei mit einem bestimmten Namen gesucht wird. (Obwohl ich erwarten würde /usr/bin, im Speicher zwischengespeichert zu werden ...)
Zugegeben, selbst das dauert nur eine halbe Sekunde, nicht zwei volle Sekunden. Aber es könnte zumindest ein Teil des Problems sein. Führen Sie du -hs /etc/bash_completion*oder wc -l /etc/bash_completion{,.d/*} | grep totalwenn Sie überprüfen möchten.
Sie können versuchen, das Skript im "Trace" -Modus manuell aufzurufen:
set -x
. /etc/bash_completion
Sie werden jede Zeile sehen, wie sie ausgeführt wird. Wenn es einen bestimmten Befehl gibt, der lange dauert, sollten Sie ihn bemerken.
( set +xDeaktiviert den Trace-Modus.)