【问题标题】:unix & gnu/linux distributions: possible locations for 'which' command?unix & gnu/linux 发行版:“which”命令的可能位置?
【发布时间】:2013-03-20 09:05:17
【问题描述】:

希望引用 which 命令的完整路径作为对某些 shell 脚本的改进。有人知道某些 unix gnu/linux 发行版BESIDES /usr/bin/which 的标准位置吗?

【问题讨论】:

    标签: linux bash unix sh csh


    【解决方案1】:

    这不是 linux 系统的标准部分。它不存在于 Linux Standard Base 4.1 中,也不存在于 Single Unix Specification Version 4/POSIX 2008 中:

    所以这个问题的唯一正式答案是在文件系统中没有可靠的位置。

    对于实际的解决方案:它应该始终在默认搜索路径目录中可用。所以最好的实用答案:从你的脚本中运行 which 没有硬编码的路径。 [编辑:任何具有一组硬编码路径的解决方案都比使用默认搜索路径更糟糕]。

    【讨论】:

    • 这个回答肯定是最有教育意义的。您没有引用任何反例。使用标准搜索路径不适用于像我这样创建 bash 函数来取代 /usr/bin/which (以合并别名和函数)的用户。
    • Slackware 14.0 安装在 /bin 中。 packages.slackware.com/…
    • 关于 bash 函数:bash 支持别名 which 并在搜索路径时调用它,如本例所示:pastebin.com/VzSZ14qk
    • 是的,bash 支持别名,因此需要编写 original 的完整路径
    【解决方案2】:

    试试这个:

    which -a which
    

    -a 标志列出了所提供参数的所有位置(与返回将在当前环境中执行的文件或链接的路径名相反,如果其参数在严格符合 POSIX 的 shell 中作为命令给出。 )

    【讨论】:

    • 与另一个答案一样,这回避了问题。真的很喜欢硬编码一个可行的解决方案,而不是在运行时检查情况。
    • 出于好奇,您为什么要对这些路径进行硬编码?上面的解决方案将保证它在运行时工作,而硬编码则不能。
    • 上述解决方案不能保证它会运行。它会运行一些“which”,它可能会返回一个列表。它无助于确定您要运行的。
    【解决方案3】:

    你可以试试:

    whereis which
    

    whereis 定位二进制,命令源

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 2015-06-10
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多