iconoclast Asked: 2018-01-07 19:58:09 +0800 CST2018-01-07 19:58:09 +0800 CST 2018-01-07 19:58:09 +0800 CST 如何从脚本访问 $preexec_functions 772 我正在将一些 Zsh 函数转换为作为脚本运行,在其中一个函数中我需要访问 (例如) 中的值$preexec_functions。一切都在函数中完美运行,但这在脚本中失败了。 是否可以从脚本访问此值? zsh 1 个回答 Voted Best Answer Stéphane Chazelas 2018-01-07T23:17:41+08:002018-01-07T23:17:41+08:00 如果该代码旨在访问交互式 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 代码,并让脚本将该代码解释为相同的数组和函数在那里声明。
如果该代码旨在访问交互式 shell 的内部数据,则它们不应作为单独的程序(脚本)运行,而应由该 shell 解释,因此可以作为函数、自动加载函数或源脚本。
如果您希望将它们定义为脚本的原因是您不希望它们污染您的 shell 环境,您可以在子 shell 中运行它们。利用:
代替:
如果是因为您不希望将它们的定义添加到您的
~/.zshrc
中,请将它们添加到另一个文件并从您的~/.zshrc
(source /path/to/that/file
) 中获取该文件,或者使用可自动加载的函数。如果您仍然希望将它们作为脚本/单独的程序运行,则需要传递这些函数的定义以及脚本可能需要的所有其他内容。喜欢:
并且有
your-script
做:那就是将该数组的定义及其引用的所有函数转储为 shell 代码,并让脚本将该代码解释为相同的数组和函数在那里声明。