Você pode descobrir em qual diretório o script está ( $0:h
em zsh, "${0%/*}"
em sh) e remover esse diretório de PATH
( path=(${path:#$0:h})
em zsh, mais complicado em sh . Isso pode falhar se PATH
contiver o mesmo diretório duas vezes, por exemplo através de um link simbólico.
Uma desvantagem da abordagem direta é que isso remove o diretório do caminho, mas outros programas no mesmo diretório podem ser desejáveis. Você pode resolver esse problema fazendo apenas a pesquisa de caminho com um caminho modificado.
next=$(path=(${path:#$0:h}); print -lr -- =$0:t)
$next
Em vez disso, faço a consulta PATH
manualmente e pulo qualquer ocorrência do script em execução.
for d in $path; do
if [[ -x $d/$0:t && ! $d/$0:t -ef $0 ]]; then
exec $d/$0:t
fi
done