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

时间:2013-08-01 16:35:58

标签: bash path

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

3 个答案:

答案 0 :(得分:30)

试试这个内置命令:

which -a python

答案 1 :(得分:2)

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

答案 2 :(得分:1)

我认为这应该有效:

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