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

Shell 如何组织我的ZSH代码?单个文件中的多个方法与多个文件中的多个方法,shell,zsh,Shell,Zsh,出于某种目的,我在ZSH中编写了一系列函数,名为X_somename say,用户将从命令行运行这些函数。大约有20个 我想知道哪种方法更为优化(在代码组织、性能等方面)- 将所有内容放在一个文件X.zsh中,该文件包含函数定义,每个函数定义的名称形式为X_somename,然后将X.zsh源文件放在.zshrc中 创建单独的文件,每个文件的名称类似于X_somename,并将包含这些文件的文件夹包含在PATH env var中 谢谢。通常的做法是定义函数,每个文件一个,然后将文件夹放在fpat

出于某种目的,我在ZSH中编写了一系列函数,名为X_somename say,用户将从命令行运行这些函数。大约有20个

我想知道哪种方法更为优化(在代码组织、性能等方面)-

  • 将所有内容放在一个文件X.zsh中,该文件包含函数定义,每个函数定义的名称形式为X_somename,然后将X.zsh源文件放在.zshrc中

  • 创建单独的文件,每个文件的名称类似于X_somename,并将包含这些文件的文件夹包含在PATH env var中


  • 谢谢。

    通常的做法是定义函数,每个文件一个,然后将文件夹放在
    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