我正在围绕定义bash函数的另一个软件包开发一些便利包装。我想用我自己的同名函数替换它们的bash函数,同时仍然可以从我的内部运行它们的函数。换句话说,我需要重命名其函数,或者为其创建某种持久别名,当我创建同名函数时,将不会对其进行修改。

举一个我没想到能做的天真的尝试的示例(实际上是行不通的):

$ theirfunc() { echo "do their thing"; }
$ _orig_theirfunc() { theirfunc; }
$ theirfunc() { echo "do my thing"; _orig_theirfunc }
$ theirfunc
do my thing
do my thing
do my thing
...

显然,我不需要无限递归,我想要:
do my thing
do their thing

我怎样才能做到这一点?

最佳答案

这是消除临时文件的一种方法:

$ theirfunc() { echo "do their thing"; }
$ eval "$(echo "orig_theirfunc()"; declare -f theirfunc | tail -n +2)"
$ theirfunc() { echo "do my thing"; orig_theirfunc; }
$ theirfunc
do my thing
do their thing

10-06 06:48