我想删除echo
命令(位于/bin/echo
),但命令 echo 仍然正常工作。当我使用which
命令时,它确认echo
已被删除
/usr/bin/which:没有回显(/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)
你知道发生了什么吗
答案1
bash 也是你的 shell 的一个内置命令(例如 bash、ksh 等),所以即使你删除了原始的 echo 二进制文件,它仍然可以在你的 shell 中工作(但你将无法像二进制文件那样使用参数等)。
请参阅这里的 bash 内置命令:http://www.gnu.org/software/bash/manual/html_node/Bash-Builtins.html
尝试在用户 .bash_profile 中添加此项(或从 shell 中添加):
enable -p echo
并尝试再次运行 echo (参考:https://astoryworthtelling.wordpress.com/2011/03/20/disable-bash-builtin-commands/)并且它不应该工作
答案2
Echo 是一个狂欢内置命令,这就是您所看到的。
我想真正的问题是:你为什么要这样做?有很多程序都依赖于 echo,如果禁用此命令,所有程序都会中断。
答案3
这实际上很好地说明了为什么在需要可移植的脚本中使用 echo 是个坏主意。它经常被 shell 内置函数覆盖。
看一下
man bash
并搜索 echo 来查找内置版本的定义位置。
答案4
根据您的需要,您仍然可以使用别名覆盖 echo
alias echo=':'