【问题标题】:How can I find all copies of an executable name in my PATH?如何在我的 PATH 中找到可执行名称的所有副本?
【发布时间】:2023-03-03 17:29:01
【问题描述】:

我正在寻找一种方法来枚举可执行文件的所有副本,这些副本被我的PATH 中的第一个副本所覆盖。我能想到的最好的就是一个函数:

find_all_exec() { 
    for i in ${PATH//:/ }; do
        find "$i/$1" 2> /dev/null
    done
}

$ find_all_exec python
/usr/local/bin/python
/usr/bin/python

这得到了我想要的(尽管它不像type 那样处理bash 别名/函数)。我很好奇是否有更内置的方式?

【问题讨论】:

    标签: bash path


    【解决方案1】:

    试试这个 builtin 命令:

    which -a python
    

    【讨论】:

    • 谢谢。正是我想要的。我想我应该多用 RTFM。
    • 内置在什么外壳中?不是 bash 版本 4.2.45(1)-release:type which -> which is /usr/bin/which。对于 bash:type -a python
    • 好点 @glennjackman 实际上 which 不是内置命令,但正如您所知,它通常与 bash 一起提供。无论如何,type -a 为我提供了与我预期不同的输出,向我展示了在不同路径中存在的可执行文件的出现。你知道为什么吗?
    • 我认为将其设为默认行为可能会破坏我使用的某些脚本,因此我在 ~/.bashrc 中将其别名为 alias whichall='which -a $*'
    【解决方案2】:

    我认为这应该可行:

    IFS=:
    for dir in $PATH; do
        if [ -x "$dir/$1" ]
        then echo "$dir/$1"
        fi
    done
    

    【讨论】:

      【解决方案3】:
      type -a *
      

      例如,

      type -a python
      

      给予

      python is /Users/user1/anaconda3/bin/python
      python is /usr/local/bin/python
      python is /usr/bin/python
      python is /Applications/CASA.app/Contents/MacOS/python
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-04-28
        • 1970-01-01
        • 1970-01-01
        • 2019-01-16
        • 2015-01-25
        • 2015-05-19
        • 1970-01-01
        相关资源
        最近更新 更多