【问题标题】:'which' vs 'command -v' in Bash [duplicate]Bash中的'which'与'command -v' [重复]
【发布时间】:2016-08-31 13:43:07
【问题描述】:

不久前我读过一些 bash 常见问题解答(我不记得了),应该避免使用 which 而首选 command -v

为什么会这样?两者各有什么优缺点?

【问题讨论】:

  • 什么?为什么? which 告诉您程序的可执行文件所在的位置,而 command -v 通常显示可执行文件的版本
  • @anishsane - 这个问题是“哪个更好”,而不是“我怎么......”。虽然其他问题的答案确实解释了差异,但问题本身是不同的。
  • 另一个你可以使用的内置函数是type -pwhich 没有任何问题,它在大多数发行版中默认提供,但它不是内置的 shell。
  • 在某些情况下which 将返回与command -v 不同的值,即使是二进制文件也是如此。 which 总是扫描 $PATH 变量,但是 bash 可能会散列命令,而不是每次都扫描它,因此如果在这些位置的任何位置添加/删除它,它将忽略它。运行 hash 以查看哪些命令已被散列,或者例如type ls 用于特定程序

标签: bash


【解决方案1】:

嗯……

command 很可能内置在您的 shell 中,使用 -v 选项会告诉您 shell 将如何调用指定为其选项的命令。

which 是一个外部二进制文件,位于/usr/bin/which,它会遍历$PATH 环境变量并检查文件是否存在。

选择前者而不是后者的一个原因是它避免了对外壳之外的东西的依赖。

这两个命令做不同的事情,你应该选择一个更符合你需要的命令。例如,如果 command 内置在您的 shell 中,command -v command 将通过其输出指示这一点(通过不存在路径),但 which command 将尝试指向您路径上的文件,无论command 将如何被您的 shell 解释。

【讨论】:

    猜你喜欢
    • 2016-10-01
    • 2012-12-18
    • 2013-03-07
    • 2012-08-17
    • 1970-01-01
    • 2012-04-10
    • 2010-11-19
    • 1970-01-01
    相关资源
    最近更新 更多