2010-12-20 43 views
20

我一直在使用Z shell一段時間,而且我開始好奇。我在編寫自己的函數時偶然發現的一件事是「自動加載」。Z Shell「autoload」builtin - 它有什麼好處?

按照zshbuiltins(1)手冊頁autoload是「等同於functions -u」(與一個例外),這是「等同於typeset -f」(與異常)。然而,在看過自動加載的使用,比如說functions/Prompts/promptinit後,我想我有一個想法是什麼。

我認爲自動加載就像是一種「導入」語句。

但爲什麼「autoload foo」優於「源代碼欄」?我不明白。

回答

25

zsh documentation指出:

的函數可以使用自動加載內建被標記爲未定義 (或 functions -utypeset -fu)。這樣的 函數沒有正文。當 函數首次執行時,外殼程序 將使用fpath變量的 元素搜索其定義。 [...]

autoload允許在不然後使用時獲得自動加載的主體中指定的功能;)

source然而採用作爲參數的腳本,然後將其在executed當前會話的環境 - 即,您將保留腳本對環境所做的所有更改,但執行該腳本時只是不是這種情況。

我認爲有很多的功能實用程序時,此功能是有益的。它允許更快地啓動(不需要加載自動加載功能的所有代碼),並且可以使外殼的內存佔用更小,更小

+1

啊,啓動速度更快;沒有想到這一點。謝謝! – Mitro 2010-12-20 21:57:22