Bashの「コマンド」の「-p」オプションと基本PATHとの相互作用を理解する

Bashの「コマンド」の「-p」オプションと基本PATHとの相互作用を理解する

commandコマンド:bashcommandという名前のシェル関数を無視し、引数を使用してコマンドを実行します。

この-pオプションは、$PATHすべての標準ユーティリティがデフォルト値を使用して取得されることを意味します。

ここで言及されているデフォルトは正確に何ですかPATH?を定義するときにデフォルト値の上に新しいパスを追加しませexport PATH="/home/ozgur/":$PATHんか?PATH

たとえば、

$ export PATH="/home/ozgur/":$PATH
$ echo $PATH
/home/ozgur/:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
$ script.sh
hey, i am working !
$ command -p script.sh
hey, i am working !

コマンドでその-pオプションを使用するときに私が定義した新しいパスをcommand無視したいのですが、PATHそのようなことは起こりません。ここで正確に何を見逃していますか?ユーザーパスの変更を上書きしない-p場合は、このオプションを使用するのはなぜですか?PATH

答え1

ここで正確に何を見逃していますか?

コマンドscript.shがハッシュされました。実行すると、hash -r期待command -p script.shどおりに失敗します。しかし、直接実行すると再ハッシュされます。

これはbashのバグのように見えます。他のシェルでは発生しません。

答え2

bash呼び出しのデフォルトパスを設定しますSTANDARD_UTILS_PATHこのサーバーエラーの回答、コンパイル時のデフォルト値は次のとおりです。

/bin:/usr/bin:/sbin:/usr/sbin:/etc:/usr/etc

ソースも見ることができます。GNUサバンナ

関連情報