为什么通过名称调用的命令在通过完整路径调用时表现不同?

为什么通过名称调用的命令在通过完整路径调用时表现不同?

我想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

当您运行 时kill,bash 使用其内置命令,该命令无法识别--verbose.当您指定完整路径时,将改为运行外部命令/usr/bin/kill,这确实支持--verbose(在您的情况下)。

相关内容