Bash 如何在路径中找到可执行文件名的所有副本?

Bash 如何在路径中找到可执行文件名的所有副本?,bash,path,Bash,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别名/函数

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

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别名/函数)。我很好奇是否有更内置的方式?

试试这个内置命令:


我认为这应该奏效:

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

type -a python
给予


谢谢正是我想要的。我想我应该多做一点RTFM。它内置在什么外壳中?非bash版本4.2.45(1)-发布:
键入which
->
which is/usr/bin/which
。对于bash:
type-a python
good point@glennjackman实际上是
,它不是一个内置命令,但正如您所知,它通常随bash一起提供。无论如何,
type-a
为我提供了与预期不同的输出,只显示了存在于不同路径中的可执行文件的实例。你知道为什么吗?我想把它作为默认行为可能会破坏我使用的一些脚本,所以我在
~/.bashrc
中将它别名为
alias whichall='whichall='which-a$*'
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