名前で呼び出されたコマンドがフルパスで呼び出されたときに動作が異なるのはなぜですか?

名前で呼び出されたコマンドがフルパスで呼び出されたときに動作が異なるのはなぜですか?

kill --verbose ...Bashスクリプトで使用したいがエラーが発生しますkill: -verbose: invalid signal specification。これは魚で非常にうまく機能するので奇妙です。調査の結果、次のような奇妙な行動が発生しました。

$ which kill
/usr/bin/kill
$ sleep 5 & kill --verbose $!
[1] 33730
bash: kill: -verbose: invalid signal specification
... wait for sleep to finish ... 
[1]+  Done                    sleep 5
$ sleep 5 & /usr/bin/kill --verbose $!
[1] 33964
sending signal 15 to pid 33964
[1]+  Terminated              sleep 5

どうしたの?killフラグが認識されていないが--verbose==/usr/bin/killの場合、認識されるのはなぜですか?which kill/usr/bin/kill

答え1

which誤解を招く;type次に変更してみてください。

$ type kill
kill is a shell builtin

bashを実行すると、kill認識されない組み込みコマンドが使用されます。フルパスを指定すると、実際にサポートされている--verbose外部コマンドが代わりに実行されます(あなたの場合)。/usr/bin/kill--verbose

関連情報