Shell 如何组织我的ZSH代码?单个文件中的多个方法与多个文件中的多个方法
出于某种目的,我在ZSH中编写了一系列函数,名为X_somename say,用户将从命令行运行这些函数。大约有20个 我想知道哪种方法更为优化(在代码组织、性能等方面)-Shell 如何组织我的ZSH代码?单个文件中的多个方法与多个文件中的多个方法,shell,zsh,Shell,Zsh,出于某种目的,我在ZSH中编写了一系列函数,名为X_somename say,用户将从命令行运行这些函数。大约有20个 我想知道哪种方法更为优化(在代码组织、性能等方面)- 将所有内容放在一个文件X.zsh中,该文件包含函数定义,每个函数定义的名称形式为X_somename,然后将X.zsh源文件放在.zshrc中 创建单独的文件,每个文件的名称类似于X_somename,并将包含这些文件的文件夹包含在PATH env var中 谢谢。通常的做法是定义函数,每个文件一个,然后将文件夹放在fpat
谢谢。通常的做法是定义函数,每个文件一个,然后将文件夹放在
fpath
中。您还应该将这些功能标记为自动加载。函数不应该是shell脚本(因此不要将它们添加到路径中,而是添加到fpath
(函数路径))
从
我实际上做的是:
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
请注意,这里有KSH风格的函数,您可以从上面链接的页面添加function foo()
:
如果设置了KSH_AUTOLOAD选项,或者该文件仅包含一个简单的
定义函数时,将执行文件的内容。这
通常会定义相关功能,但也可能执行
初始化,在函数的上下文中执行
执行,因此可以定义本地参数。这是一个错误
如果函数不是通过加载文件定义的
否则,函数体(没有周围的'funcname(){…}')
被视为文件的完整内容。此表格允许
直接用作可执行shell脚本的文件。中频处理
如果文件的属性导致函数被重新定义,则函数
它本身不会被重新执行。强制shell执行
初始化,然后调用定义的函数,文件应该
在中包含初始化代码(将被执行然后丢弃)
添加到完整的函数定义(将保留用于
对函数的后续调用),以及对shell函数的调用,
包括最后的任何论点
如果对所有函数文件使用autoload+x。。那么使用自动加载有什么意义呢?这不是立即加载函数而不是按需加载吗?这怎么会比用你所有的函数定义来寻找一个文件更好呢?对不起,我弄糊涂了。IRRC
+X
仅对类似KSH的功能是必需的。在实际使用SSD时,我认为使用自动加载不会有任何性能提升。主要的优点是保持代码的隔离,以及允许您通过复制一个文件来添加另一个函数。
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