Basicamente, estou tentando obter algo semelhante ao command search with $PATH
, mas com uma lista diferente de diretórios e o arquivo que estou procurando não é executável.
A lista de diretórios é fixa (posso empacotá-la em uma variável no mesmo formato de PATH, ou qualquer outro), e não quero descer em subdiretórios. Lembro-me vagamente de que o bash complete
tem uma opção para isso, mas li a seção e não consigo identificá-la. Estou perto?
Talvez algo assim (supondo que o arquivo esteja em ~/lib
):
> filepath -p ".:/etc:$HOME/lib:$HOME/bin" foo
/home/alexis/lib/foo
Em outras palavras, estou procurando por algo como which
ou which -a
, o que for mais fácil, mas não deve se limitar a executáveis (e não deve pesquisar apenas $PATH
, mas posso contornar isso ;-)).
Você pode usar uma função bash como wrapper para GNU
find
:O caminho de pesquisa padrão é definido na primeira linha da função, use
:
como separador. Ele pode ser substituído por variável de ambienteFP_PATH
ou opção-p
.find
sai depois de imprimir o primeiro resultado, a menos que a opção-a
seja usada. A pesquisa é limitada a arquivos regulares e links simbólicos, ajuste as opções conforme necessário.Exemplos:
find
já suporta vários caminhos de pesquisaComo alternativa, use
fd
o que é significativamente mais rápido, com muito mais recursos e mais bonito do que encontrarSe quiser armazenar a lista de diretórios em um array (
bash
), você pode usar um código como este:Uso
Observe que quaisquer variáveis e globs de shell - curingas - serão avaliados no momento em que a matriz
filefindlist
for definida. Portanto, se você tiversrc/one
e posteriormente criarsrc/two
,src/*
terá expandido apenas parasrc/one
. Da próxima vez que você definir a matriz, porém, ela incluirásrc/one
esrc/two
.Se você deseja uma implementação exata de sua sugestão na pergunta, algo assim pode funcionar:
Uso