如何组织我的ZSH代码?单个文件与多个文件中的多种方法

时间:2014-07-05 06:56:42

标签: shell zsh

我在ZSH中为一些目的编写了一堆函数,命名为X_somename,用户将从命令行运行。将会有大约20个。

我想知道哪种方法更优化(关于代码组织,性能等) -

  1. 将所有内容放在包含函数定义的单个文件X.zsh中,每个文件都具有X_somename形式的名称,然后在.zshrc

  2. 中获取源X.zsh
  3. 创建单独的文件,每个文件的名称都是X_somename,并在PATH环境中包含包含它们的文件夹

  4. 感谢。

1 个答案:

答案 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函数的调用,   最后包括任何论据。