'which' vs 'command -v' in Bash
我刚才在一些bash常见问题解答中读到(我不记得了),应该避免使用which,而首选command -v。
为什么会这样?两者的优点和缺点是什么?
- 什么?为什么?which告诉您程序可执行文件的位置,而command -v通常显示可执行文件的版本。
- 链接如下:检查bash脚本中是否存在程序
- @这个问题是"哪个更好",而不是"我该怎么做"。虽然另一个问题的答案确实解释了差异,但问题本身是不同的。
- 另一个您可以使用的内置设备是type -p。which没有什么问题,默认情况下,它在大多数发行版上都提供,但它不是shell内置的。
- 哦,我的意思是"检查那个问题的答案"。这个问题的开头是"我之前读过一些bash常见问题解答"(我不记得了),所以我的评论是这里的链接。对不起,我不清楚…
- 有些情况下,即使对于二进制文件,which也会返回与command -v不同的值。which总是扫描$PATH变量,但是bash可以散列命令,而不是每次扫描它,因此如果在这些位置的任何地方添加/删除它,它将忽略。运行hash查看哪些命令已被散列,或者例如,type ls用于特定程序
好。。。
command可能内置于shell中,使用-v选项,可以告诉您shell将如何调用指定为其选项的命令。
which是一个外部二进制文件,位于/usr/bin/which上,它逐步通过$PATH环境变量并检查文件的存在。
选择前者而不是后者的一个原因是,它避免了对外壳之外的东西的依赖。
这两个命令执行不同的操作,您应该选择一个更符合您的需要的命令。例如,如果command内置在shell中,command -v command将用它的输出(通过不存在路径)来表示这一点,但which command将尝试指向路径上的文件,而不管shell如何解释command。