我正在将一些 Zsh 函数转换为作为脚本运行,在其中一个函数中我需要访问 (例如) 中的值$preexec_functions
。函数中的一切都运行良好,但在脚本中却失败了。
是否可以从脚本访问该值?
答案1
如果该代码旨在访问交互式 shell 的内部数据,则它们不应作为单独的程序(脚本)运行,而应由该 shell 解释,因此可以作为函数、自动加载函数或来源脚本。
如果您希望将它们定义为脚本的原因是您不希望它们污染 shell 的环境,则可以在子 shell 中运行它们。使用:
myfunction() (
...
)
代替:
myfunction() {
...
}
如果是因为您不希望将它们的定义添加到您的 中,请将它们添加到另一个文件中并从您的( )~/.zshrc
中获取该文件,或者使用可自动加载函数。~/.zshrc
source /path/to/that/file
如果您仍然希望将它们作为脚本/单独的程序运行,则需要传递这些函数的定义以及脚本可能需要的其他所有内容。喜欢:
CODE=$(
typeset -p preexec_functions
(($#preexec_functions)) && functions $preexec_functions
) your-script
并your-script
做了:
eval "$CODE"
即将该数组的定义及其引用的所有函数转储为 shell 代码,并让脚本将该代码解释为在那里声明相同的数组和函数。