如果有同名的内部命令和外部命令(程序),默认执行哪一个?

如果有同名的内部命令和外部命令(程序),默认执行哪一个?

bash有一个名为 的内部命令kill,并且在 Linux 中,还有一个名为 的外部命令(程序)kill

当我执行killin时bash,内部命令kill被执行。

我有两个问题:

  1. 是否可以更改设置以使默认情况下执行外部命令而不是内部命令(当然不指定外部命令的完整路径)。
  2. 在所有(主要)shell 中默认执行内部命令而不是外部命令是标准行为,还是只是一个bash问题?

答案1

  1. 用于env调用它。

    $ env kill
    kill: not enough arguments
    $ kill
    kill: usage: kill [-s sigspec | -n signum | -sigspec] pid | jobspec ... or kill -l [sigspec]
    
  2. 所有 shell 和命令处理器。

答案2

对于您的第一个问题:是的,有一个设置可以使默认情况下执行外部命令而不是内部命令。

您可以通过以下方式关闭内置功能

enable -n COMMAND

您可以通过以下方式打开内置功能

enable COMMAND

或者您可以更改命令的优先级。 bash命令的优先级是:

  • 别名,最高
  • 功能
  • 内置
  • $PATH 中的外部命令

对于你的第二个问题:我认为你总是可以假设内部命令优先于外部命令。这不仅仅是一个bash的事情。

相关内容