On Dec 19, 12:32am, Daniel Shahaf wrote:
}
} I suppose you could write a command_not_found_handler() function that
} tried to reverse engineer _why_ the command wasn't found - with the
} obvious limitations, e.g., race conditions between the library's
} execution and the handler's.
I don't think there can be a race here because the handler won't be
invoked if the execve() hasn't already failed.
Something like this:
command_not_found_handler () {
local attempt="$1"
if [[ "$1" != /* && ( -o pathdirs || "$1
" != */* ) ]]
then
emulate zsh -c 'attempt=$^path/$1(N[1])'
fi
if [[ -f $attempt ]]
then
local hashbang
read -u 0 -k 2 hashbang < "$attempt"
case "$hashbang" in
('#!') print -u2 -- $1\: bad '#!' interpreter ;;
(*) print -u2 failed to load $1 ;;
esac
else
print -u2 -- $1\: no such file in \$PATH
fi
return 127
}