保护在ZSH中不被覆盖的功能

时间:2016-08-05 22:07:06

标签: zsh

我有一个文件,其中定义了我的ZSH函数,我从zshrc中获取它。 有一组辅助函数,仅用于该文件的其他函数。 我的问题是如何为这些帮助者保留可读的名称(例如'问'等),并确保稍后在其他源文件中不会覆盖它们。 所以,例如我有两个功能:

helper() {
    # do something
}

function-i-want-to-use-in-shell() {
     helper # call helper, I want to be sure that it is 'my' helper
     # do something more
}

我想保护helper在该文件中声明的函数。 如果我可以将这些函数包装在例如subshel​​l ()中,然后将函数-in-want-to-use-in-shell导出到parent(我知道这是不可能的),那将是很好的。 所以我正在寻找一种方便的方法来为这些函数创建类似于它们自己的范围,并使它们中的一些成为全局的,一些是本地的。

[修改] 我想另一个例子将更好地解释我想要实现的行为: 因此,对于第二个示例,我有两个文件:file1.shfile2.shfile1.sh与上面的示例相同,在file2.sh另一个函数helper中定义。我希望您了解helper来自file1.sh它只是本地使用的功能(在该文件中),只是代码片段。稍后在shell中,我只想使用function-i-want-to-use-in-shell中的file1.shhelper中的file2.sh。我不希望helper只读,我只想将其用于本地使用。也许我可以做像" namespace "对于file1.sh中的函数,或以某种方式在该文件中实现类似javascript的作用域查找行为。我现在看到的唯一方法是拒绝保持良好,可读,自我解释的辅助函数名称的条件,以及 给他们一些很难被别人发明的名字,或者为这些功能使用前缀。哦,我只是想在其他函数中编写类似if ask "question"; then而不是if my-local-ask "question"; then的东西,并确保如果某人(或我自己)稍后会定义另一个函数ask,那么什么都不会破

1 个答案:

答案 0 :(得分:0)

它有点笨手笨脚,但你可以使用自动加载功能,如果不能阻止覆盖功能,在调用之前可以轻松“重置”它。例如。

# Assumes that $func_dir is a directory in your fpath;
% echo 'print bar' > $func_dir/helper
% helper () { print 9; }
% helper
9
% unset -f helper
% autoload helper
% helper
bar