diff options
-rwxr-xr-x | nextbin | 33 |
1 files changed, 18 insertions, 15 deletions
@@ -1,14 +1,7 @@ -#!/bin/sh +#!/usr/bin/env sh set -e -die() { - fmt=$1 - shift - printf "nextbin %s failed: $fmt\n" "$orig_exe" "$@" >&2 - exit 1 -} - usage() { # shellcheck disable=SC2016 echo 'usage: nextbin [-v] "$0" "$@"' >&2 @@ -19,12 +12,21 @@ case "$1" in -*|'') usage; exit 1;; *) action="exec" esac + orig_exe=$1 shift -exe_name=${orig_exe##*/} +die() { + fmt=$1 + shift + printf "nextbin %s failed: $fmt\n" "$orig_exe" "$@" >&2 + exit 1 +} + +[ / -ef / ] || exec bash "$0" "$orig_exe" "$@" || die "test -ef doesn't work, and bash not found" [ -n "$PATH" ] || die 'PATH is empty' +exe_name=${orig_exe##*/} path=$PATH phase=1 found= @@ -36,9 +38,7 @@ while :; do phase=2 fi elif [ "$exe" -ef "$orig_exe" ]; then - if [ -n "$found" ]; then - die 'duplicate PATH entries found' - fi + [ -z "$found" ] || die 'duplicate PATH entries found' elif [ -z "$found" ]; then found=$exe fi @@ -49,6 +49,9 @@ while :; do esac done -[ "$phase" != 1 ] || found=$(command -v "$exe_name") || die '%s is not in PATH' "$orig_exe" -[ -n "$found" ] || die '%s is last instance' "$orig_exe" -$action "$found" "$@" +if [ "$phase" = 1 ]; then + found=$(command -v "$exe_name") || die '%s is not in PATH' "$exe_name" +elif [ -z "$found" ]; then + die '%s is last instance' "$orig_exe" +fi +"$action" "$found" "$@" |