如何从脚本访问 $preexec_functions

如何从脚本访问 $preexec_functions

我正在将一些 Zsh 函数转换为作为脚本运行,在其中一个函数中我需要访问 (例如) 中的值$preexec_functions。函数中的一切都运行良好,但在脚本中却失败了。

是否可以从脚本访问该值?

答案1

如果该代码旨在访问交互式 shell 的内部数据,则它们不应作为单独的程序(脚本)运行,而应由该 shell 解释,因此可以作为函数、自动加载函数或来源脚本。

如果您希望将它们定义为脚本的原因是您不希望它们污染 shell 的环境,则可以在子 shell 中运行它们。使用:

myfunction() (
  ...
)

代替:

myfunction() {
  ...
}

如果是因为您不希望将它们的定义添加到您的 中,请将它们添加到另一个文件中并从您的( )~/.zshrc中获取该文件,或者使用可自动加载函数。~/.zshrcsource /path/to/that/file

如果您仍然希望将它们作为脚本/单独的程序运行,则需要传递这些函数的定义以及脚本可能需要的其他所有内容。喜欢:

CODE=$(
  typeset -p preexec_functions
  (($#preexec_functions)) && functions $preexec_functions
) your-script

your-script做了:

eval "$CODE"

即将该数组的定义及其引用的所有函数转储为 shell 代码,并让脚本将该代码解释为在那里声明相同的数组和函数。

相关内容