#!/bin/sh set -e for f; do test -r "$f" shebang="$(sed 1q < "$f" | \ tr '\t' ' ' | \ sed -n 's/#! *\([^ ]\+\)\(\| \+.*\)$/\1\n\2/p' | \ sed 's/^ *//')" test -n "$shebang" path="$(printf '%s\n' "$shebang" | sed -n 1p)" program="$(printf '%s\n' "$path" | sed 's/^.*\/\([^/]\+\)$/\1/')" arguments="$(printf '%s\n' "$shebang" | sed -n 2p)" argument1="$(printf '%s\n' "$arguments" | cut -d ' ' -f 1)" if test -z "$path"; then continue fi test -x "$path" if test "$program" = env; then which -- "${arguments}" >/dev/null 2>/dev/null elif test "$program" = shebang; then which -- "${argument1}" >/dev/null 2>/dev/null fi done