2010-12-20 17 views
20

Ich benutze die Z-Shell schon seit einer Weile, und ich bin neugierig geworden. Eine Sache, über die ich beim Schreiben meiner eigenen Funktionen gestolpert bin, ist "Autoload".Z Shell "Autoload" eingebaut - wofür ist es gut?

zshbuiltins des nach (1) -Handbuchseite autoload „entsprechen functions -u“ (mit einer Ausnahme), ist, die „äquivalent zu typeset -f“ (mit einer Ausnahme), ist. Aber nach dem Betrachten der autlooad Verwendung von, sagen wir functions/Prompts/promptinit, denke ich, ich habe eine Idee, was es tut.

Ich denke an Autoload als, na ja, Art von "Import" Aussage.

Aber warum ist "autoload foo" besser als "source bar"? Ich verstehe das nicht.

Antwort

25

Wie in den zsh documentation erklärt:

Eine Funktion kann als undefiniert mit dem Autoload builtin (oder functions -u oder typeset -fu) gekennzeichnet werden. Solch eine Funktion hat keine Körper. Wenn die Funktion zum ersten Mal ausgeführt wird, sucht die Shell nach ihrer Definition unter Verwendung der Elemente der Variablen fpath. [...]

autoload ermöglicht Funktionen ohne Körper festgelegt werden, die dann automatisch geladen werden, wenn verwendet;)

source nimmt jedoch als Argument ein Skript, das dann executed in die Umgebung der aktuellen Sitzung - dh Sie behalten alle Änderungen, die das Skript an die Umgebung vornimmt, was nicht der Fall ist, wenn nur Ausführen des Skripts.

Ich denke, dass diese Funktion von Vorteil ist, wenn viele Dienstprogramme in Funktionen. Es ermöglicht schneller Start (der gesamte Code für die Autoload-Funktionen müssen nicht geladen werden) und kann den Speicherbedarf der Shell kleiner halten.

+1

Ah, schnellerer Start; Daran habe ich nicht gedacht. Vielen Dank! – Mitro