#!/bin/sh orig_exe=$(realpath -s "$1") exe_name=${orig_exe##*/} case "$orig_exe" in */*) ;; *) printf 'error: cannot find next executable: argv[0] is %s, missing /\n' "$orig_exe" exit 1 esac paths= passed_paths= set -f _IFS=$IFS IFS=: for path in $PATH; do file=$path/$exe_name if [ "$file" = "$orig_exe" ]; then if [ -n "$passed_paths" ] && [ -n "$paths" ]; then printf 'error: ambiguous next executable for %s past %s, due to multiple non-consecutive instances of %s in PATH' "$exe_name" "$orig_exe" "$(dirname "$orig_exe")" exit 1 fi passed_paths=${paths+$paths:} paths= else paths="${paths+$paths:}$path" fi done IFS=$_IFS PATH="$passed_paths$paths" exec "$exe_name" exit 1