【发布时间】: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 中重置它的函数?非常感谢您的帮助!
【问题讨论】: