如何在我的 PATH 中找到可执行名称的所有副本?

Posted

技术标签:

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

我正在寻找一种方法来枚举可执行文件的所有副本,这些副本被我的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 别名/函数)。我很好奇是否有更内置的方式?

【问题讨论】:

【参考方案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

【讨论】:

以上是关于如何在我的 PATH 中找到可执行名称的所有副本?的主要内容,如果未能解决你的问题,请参考以下文章

在 Windows cmd 中,如何在当前目录中运行可执行文件(而不是在 %PATH% 中具有相同名称的可执行文件)而不参考完整路径? [关闭]

linux文件管理之查找

未找到 xcode 13 可执行文件

检测可执行文件是不是在用户的 PATH [重复]

如何在我的 cloudera 集群中找到哪个 KUDU DB 的 KUDU 主名称或端口?

如何使用 SQL 找到具有预定义最小间隙大小的所有“间隙”?