包装 shell 个内置函数

Wrapping shell built-ins

我想包装内置 Bash 命令 export 以便它记录正在导出的变量。

在像 JavaScript 这样的语言中,如果我想包装一个内置对象,我可以保存对原始对象的引用。因此,例如,我们可以使内置 alert 大写其参数:

var originalAlert = alert;
alert = function(s) {
  originalAlert(s.toUpperCase());
}

但是由于 Bash 没有这样的引用,我认为不可能用相同的技术包装 export

我错了吗?有什么方法可以包装 bash 内置的 export?

您可以使用 builtin 命令调用内置函数,即使它已被函数覆盖:

export() {
    echo "$@"
    builtin export "$@"
}