内部コマンドと同じ名前の外部コマンド(プログラム)がある場合、デフォルトではどのコマンドが実行されますか?

内部コマンドと同じ名前の外部コマンド(プログラム)がある場合、デフォルトではどのコマンドが実行されますか?

bashという内部コマンドがありkill、Linuxにはという外部コマンド(プログラム)がありますkill

killで実行すると、bash内部コマンドがkill実行されます。

2つの質問があります。

  1. デフォルトでは、内部コマンドの代わりに外部コマンドが実行されるように設定を変更できますか(もちろん、外部コマンドへのフルパスを指定せずに)。
  2. デフォルトでは、外部コマンドの代わりに内部コマンドを実行することがすべての(デフォルト)シェルの標準的な動作ですか、それとも単なる問題ですか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. すべてのシェルとコマンドプロセッサ。

答え2

最初の質問:はい、内部コマンドの代わりにデフォルトで外部コマンドを実行するように設定することがあります。

次のように組み込み機能をオフにできます。

enable -n COMMAND

内蔵機能をオンにする方法は次のとおりです。

enable COMMAND

または、コマンドの優先順位を変更できます。 Bashコマンドの優先順位は次のとおりです。

  • エイリアス、最高
  • 機能
  • 組み込み
  • $ PATHの外部コマンド

2番目の質問:内部コマンドが外部コマンドよりも優先されると常に想定できると思います。これは単にバッシュの仕事ではありません。

関連情報