Вы можете узнать, в каком каталоге находится скрипт ( $ 0: h
в zsh, «$ {0% / *}»
в sh) и удалите этот каталог из ПУТЬ
( path = ($ {path: # $ 0: h})
в zsh, более сложный в sh . Это может потерпеть неудачу, если ПУТЬ
содержит один и тот же каталог дважды, например, через символическую ссылку.
Обратной стороной прямого подхода является то, что он удаляет каталог из пути, но другие программы в том же каталоге могут Вы можете решить эту проблему, выполнив поиск только пути с измененным путем.
next=$(path=(${path:#$0:h}); print -lr -- =$0:t)
$next
Вместо этого я бы выполнил поиск PATH
вручную и пропустил любое вхождение запущенного сценария.
for d in $path; do
if [[ -x $d/$0:t && ! $d/$0:t -ef $0 ]]; then
exec $d/$0:t
fi
done