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