暂时取消Bash功能

时间:2016-07-21 20:41:56

标签: bash function

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

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

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

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

我想到了这个问题的几种可能的解决方案,其中没有一个我特别满意。

方法1:只需链接到原始可执行文件

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

虽然这会达到预期的效果,但它并不理想,因为它取决于知道原始ls(在这种情况下)位于何处。这会在ls

中没有/bin的任何平台上中断

方法2:方法完成

后,再次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中重置它?非常感谢你的帮助!

1 个答案:

答案 0 :(得分:2)

  

取消设置功能,调用原始功能,然后重新设置功能。<​​/ p>

请勿打扰取消设置/重新设置此功能,而是使用内置command

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