覆盖一个shell函数,保留对原始函数的引用

前端之家收集整理的这篇文章主要介绍了覆盖一个shell函数,保留对原始函数的引用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
是否可以覆盖一个 shell函数并保留对原始函数的引用? @H_301_1@f() { echo original; } f() { echo wrapper; ...; } f

输出应为:@H_403_4@ @H_301_1@wrapper original

这可能是半便携式的吗?@H_403_4@

理由:我试图通过用shell函数替换它的一部分来测试我的程序,将其调用记录到一个日志文件中.只要我只包含命令和内置函数,只要我不介意滥用日志记录,这个工作正常.现在我想让测试套件更容易维护,只需在每个测试中记录有趣的部分.@H_403_4@

所以让我们的程序包括@H_403_4@ @H_301_1@f g h

其中f,g,h都是shell函数,我想跟踪g的执行.@H_403_4@

Jens的答案是正确的.只需添加下面的代码完整性.

你可以简单地使用它,如下所示:@H_403_4@ @H_301_1@eval "`declare -f f | sed '1s/.*/_&/'`" #backup old f to _f f(){ echo wrapper _f # pass "$@" to it if required. }

我在这里使用了相同的逻辑:https://stackoverflow.com/a/15758880/793796@H_403_4@

猜你在找的Bash相关文章