![为什么“kill”看起来不是 Bash 内置函数? (应该是)](https://linux22.com/image/150954/%E4%B8%BA%E4%BB%80%E4%B9%88%E2%80%9Ckill%E2%80%9D%E7%9C%8B%E8%B5%B7%E6%9D%A5%E4%B8%8D%E6%98%AF%20Bash%20%E5%86%85%E7%BD%AE%E5%87%BD%E6%95%B0%EF%BC%9F%20%EF%BC%88%E5%BA%94%E8%AF%A5%E6%98%AF%EF%BC%89.png)
互联网上一致认为:kill
Bash 是内置的。Bash 变更日志说同样的。
然而我的其他内置函数显然不这么认为:
$ builtin kill
bash: builtin: kill: not a shell builtin
$ type kill
kill is /bin/kill
$ command -V kill
kill is /bin/kill
即使在“SHELL BUILTIN COMMANDS”部分中help kill
提供了文档和man bash
提及kill
(但是,如果我们开始解释符号,在手册的其他地方,它仅被称为“kill
命令”,而已确认的内置函数被称为“wait
内置函数”)。
这里发生了什么?这是计划的一部分吗?我在 Linux 上运行 Bash 5.0.2。
答案1
kill
一直以来都是一个内置实用程序,bash
就像 Korn shell 中一样。它需要是内置的,以便能够杀死 shell 作业(例如使用kill %1
),因为这些作业编号是 shell 内部表中的索引,外部kill
无法了解任何信息。
内置实用程序可能是残疾人使用该enable
命令及其-n
选项。
很明显来自评论你曾经拥有过的
enable -n kill
kill
在 shell 的启动文件之一中,这将禁用该实用程序的内置变体并强制 shell 使用/bin/kill
.
要解决您的问题,请从该命令所在的任何 shell 启动文件中删除该命令。