Há um executável /usr/bin/foo
que eu e outros scripts usamos, mas que se comporta um pouco mal, então criei um wrapper Bash com o mesmo nome de arquivo no /usr/local/bin/foo
qual corrigi seu comportamento inadequado. Meu PATH
é /usr/local/bin:/usr/bin
. No script wrapper, eu tenho que executar o executável original por caminho absoluto para não entrar em um loop infinito:
$ cat /usr/local/bin/foo
#/bin/zsh
/usr/bin/foo | grep -v "^INFO" # stfu, really
Existe alguma maneira simples (talvez específica Zsh ou Bash) para executar próximo foo
em PATH
, que é o foo
que está em PATH
diretórios que são depois o diretório do qual atual foo
foi executado, para que eu não teria que usar o caminho absoluto para o executável original?
Eu poderia fazer uma função para isso /etc/zshenv
e não é um problema. Só estou me perguntando se existe algo padrão. Não quero usar alias ou corrigir o executável original.
EDIT 1:
$ cat /usr/local/bin/foo
#/bin/zsh
path=(${path/#%$0:A:h}) foo | grep -v "^INFO" # stfu, really
Isso deve esvaziar (mas manter) todas as seqüências de caracteres em PATH ( ${path/...}
) que correspondem totalmente ( #%
) ao :A
diretório absoluto ( ) ( :h
) do executável atual ( $0
). TBH, eu o montei no StackExchange e não o entendo completamente. Espero que não me morda.
EDIT 2:
$ cat /usr/local/bin/foo
#/bin/zsh
path[${path[(i)$0:A:h]}]=() foo | grep -v "^INFO" # stfu, really
$path[(i)foo]
localiza o índice de foo
na matriz path
ou mais 1 comprimento da matriz.