如何在我的 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% 中具有相同名称的可执行文件)而不参考完整路径? [关闭]