【问题标题】:Temporarily Unsetting Bash Function暂时取消 Bash 功能
【发布时间】:2016-07-22 04:46:26
【问题描述】:

well documented 可能是 unset 一个 Bash 函数。考虑这个函数:

ls() {
    echo 'Executing';
    # Call to original ls
}

可以使用unset -f ls 取消设置。

我想构建一个包装函数,它会暂时取消设置函数,调用原始函数,然后将函数重置回来。我想这样做是为了执行围绕编程的代码,而不必随意重命名我的函数。

我已经想到了几个可能的解决方案来解决这个问题,但没有一个我特别满意。

方法一:简单链接到原始可执行文件

ls() {
    echo 'Executing';
    /bin/ls $@;
}

虽然这会达到预期的效果,但这并不理想,因为它取决于提前知道原始ls(在这种情况下)的位置。这将在/bin 中没有ls 的任何平台上中断

方法二:source方法执行完毕后再次定义函数

ls() {
    echo 'Executing';
    unset -f ls;
    /bin/ls $@;
    source ~/.bash_functions;
}

方法3:存储函数的状态(尝试)

我无法让这个工作,但似乎我应该能够捕获该功能,保存它,然后取消设置并重置该功能,如下所示:

ls() {
    echo 'Executing';
    SAVED=`which ls`;
    unset -f ls;
    /bin/ls $@;
    ls=$SAVED;
}

那么,如何取消设置调用原始函数然后在 Bash 中重置它的函数?非常感谢您的帮助!

【问题讨论】:

    标签: bash function


    【解决方案1】:

    取消设置函数,调用原始函数,然后重新设置函数。

    不要打扰取消设置/重新设置功能,改用command 内置函数:

    >alias pwd='echo nope'
    >pwd
    nope
    >command pwd
    /home/Aaron
    

    【讨论】:

    • 哇!我已经在航站楼住了一段时间了,我不知道这存在。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 2016-07-23
    • 2020-05-30
    • 2017-01-08
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 2019-04-12
    • 1970-01-01
    相关资源
    最近更新 更多