如果有同名的內部命令和外部命令(程式),則預設執行哪一個?

如果有同名的內部命令和外部命令(程式),則預設執行哪一個?

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的事情。

相關內容