基本上,我试图获得类似于命令搜索的内容$PATH
,但具有不同的目录列表,并且我正在搜索的文件不可执行。
目录列表是固定的(我可以将其打包到与 PATH 或其他格式相同的变量中),并且我不想下降到子目录中。我依稀记得 bashcomplete
对此有一个选项,但我通读了该部分但无法发现它。我很接近吗?
也许是这样的(假设文件在~/lib
):
> filepath -p ".:/etc:$HOME/lib:$HOME/bin" foo
/home/alexis/lib/foo
换句话说,我正在寻找类似which
or 之类的东西which -a
,任何更容易的东西,但它不应该仅限于可执行文件(而且它不应该只搜索$PATH
,但我可以解决这个问题 ;-))。
您可以使用 bash 函数作为 GNU 的包装器
find
:默认搜索路径定义在函数的第一行,用作
:
分隔符。FP_PATH
它可以被环境变量或选项覆盖-p
。除非使用find
选项,否则在打印第一个结果后退出。-a
搜索仅限于常规文件和符号链接,根据需要调整选项。例子:
find
已经支持多个搜索路径或者使用
fd
which 比 find 更快、更有特色、更漂亮如果您愿意将目录列表存储在一个数组 (
bash
) 中,您可以使用如下代码:用法
filefindlist
请注意,任何变量和 shell glob(通配符)都将在定义数组时进行评估。因此,如果您有src/one
并稍后创建src/two
,则src/*
只会扩展到src/one
. 不过,下次您定义数组时,它将包含src/one
和src/two
。如果您想在问题中准确实施您的建议,那么这样的事情可能会起作用:
用法