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