有一个类似的问题涉及“包装”场景,例如您想cd
用调用 builtin 的命令替换cd
。
但是,鉴于 shellshock 等人并知道 bash 从环境中导入函数,我进行了一些测试,但找不到cd
从脚本中安全调用内置函数的方法。
考虑这个
cd() { echo "muahaha"; }
export -f cd
Run Code Online (Sandbox Code Playgroud)
在此环境中使用调用的任何脚本cd
都会中断(考虑类似 的效果cd dir && rm -rf .
)。
有用于检查命令类型的命令(方便地称为type
)和用于执行内置版本而不是函数的命令(builtin
和command
)。但是,瞧,这些也可以使用函数覆盖
builtin() { "$@"; }
command() { "$@"; }
type() { echo "$1 is a shell builtin"; }
Run Code Online (Sandbox Code Playgroud)
将产生以下结果:
$ type cd
cd is a shell builtin
$ cd x
muahaha
$ builtin cd x
muahaha
$ command …
Run Code Online (Sandbox Code Playgroud)