http://qs321.pair.com?node_id=1213530


in reply to Re^11: shebang anomaly
in thread shebang anomaly

If I understand this correctly:

If the execl() function fails due to an error equivalent to the ENOEXEC error, the shell shall execute a command equivalent to having a shell invoked with the command name as its first operand, with any remaining arguments passed to the new shell.

Then the shell is required to ignore the #! line if present, since the kernel already tried it and failed. However, this section of the other page you linked to hints that bash may do #! interpretation on systems that don't support #!, such as cygwin.

So, I was completely off the mark for saying it might be in libc, but correct in the original response that it isn't the shell doing #! interpretation, since it's natively supported by macOS and Linux.

FWIW, here is what I used to use as a template, when I was working in a shop with Solaris, HP-UX, and Linux, and I couldn't count on the system's version of perl.

#!/bin/sh PATH=$HOME/perl/bin:$HOME/bin:$PATH export PATH exec perl -S -w -x $0 ${1+"$@"} #!perl #line 10 use 5.008; use strict; use warnings;