Linux Shell中如何重载echo命令?实操遇阻求助
为什么能重载
cp却无法重载echo? 核心原因是**echo是大多数Shell的内置命令,而cp是外部可执行程序**,两者的执行优先级存在本质差异:
- Shell执行命令时,会优先检查是否为内置命令,若是则直接执行,不会去
PATH路径中查找对应程序;只有外部命令才会按照PATH的顺序查找可执行文件。 - 你可以用
type命令验证这一区别:- 执行
type echo,会输出类似echo is a shell builtin的结果,说明它是Shell内置组件; - 执行
type cp,会输出类似cp is /usr/bin/cp的结果,说明它是位于PATH中的外部程序。
- 执行
- 你修改
PATH让当前目录优先的方法仅对外部命令生效,因此能成功重载cp,但对内置的echo无效——哪怕把原cp重命名为echo,Shell依然会优先调用自身内置的echo,不会执行你放在当前目录的文件。
如果确实需要重载echo,可以先禁用Shell内置的echo命令:
enable -n echo
执行这条命令后,Shell会转而按照PATH顺序查找外部的echo程序,此时你的重载操作就能生效。不过要注意,禁用内置echo可能会影响依赖该内置命令的脚本行为,需谨慎操作。
内容的提问来源于stack exchange,提问作者Alekh Avinash
相关产品推荐
相关产品推荐

