我在ZSH中为一些目的编写了一堆函数,命名为X_somename,用户将从命令行运行。将会有大约20个。
我想知道哪种方法更优化(关于代码组织,性能等) -
将所有内容放在包含函数定义的单个文件X.zsh中,每个文件都具有X_somename形式的名称,然后在.zshrc
创建单独的文件,每个文件的名称都是X_somename,并在PATH环境中包含包含它们的文件夹
感谢。
答案 0 :(得分:1)
通常的做法是定义函数,每个文件一个,并将文件夹放在fpath
中。您还应该标记自动加载的功能。函数不应该是shell脚本(因此不要将它们添加到您的路径中,而是添加到fpath
(函数路径))。
来自http://zsh.sourceforge.net/Doc/Release/Functions.html
fpath=(~/myfuncs $fpath)
autoload myfunc1 myfunc2 ...
我实际做的是:
if [[ -d $ZDIR/code ]]; then
# Autoload shell functions from $ZDIR/code with the executable bit on.
for func in $ZDIR/code/*(N-.x:t); do
unhash -f $func 2>/dev/null
autoload +X $func
done
fi
请注意我在上面链接的页面中添加function foo()
的KSH样式函数:
如果设置了KSH_AUTOLOAD选项,或者文件只包含一个简单选项 定义函数,将执行文件的内容。这个 通常会定义有问题的功能,但也可能会执行 初始化,在函数的上下文中执行 执行,因此可以定义本地参数。这是一个错误 如果没有通过加载文件来定义函数。
否则,函数体(没有包围'funcname(){...}') 被视为文件的完整内容。这种形式允许 文件直接用作可执行shell脚本。如果处理 该文件导致函数重新定义,该函数 本身不会被重新执行。强制shell执行 初始化然后调用定义的函数,该文件应该 包含初始化代码(将被执行然后丢弃) 除了完整的函数定义(将保留为 后续调用函数),以及对shell函数的调用, 最后包括任何论据。