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.d
gibt 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 $PATH
nach 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 total
wenn 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 +x
Deaktiviert den Trace-Modus.)