![为什么通过名称调用的命令在通过完整路径调用时表现不同?](https://linux22.com/image/194309/%E4%B8%BA%E4%BB%80%E4%B9%88%E9%80%9A%E8%BF%87%E5%90%8D%E7%A7%B0%E8%B0%83%E7%94%A8%E7%9A%84%E5%91%BD%E4%BB%A4%E5%9C%A8%E9%80%9A%E8%BF%87%E5%AE%8C%E6%95%B4%E8%B7%AF%E5%BE%84%E8%B0%83%E7%94%A8%E6%97%B6%E8%A1%A8%E7%8E%B0%E4%B8%8D%E5%90%8C%EF%BC%9F.png)
我想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
(在您的情况下)。