Hacker News new | ask | show | jobs
by vbezhenar 1443 days ago
It seems to be a convention those days to use `#!/usr/bin/env sh`. At least it's a single entry point. Why can't we just write `#!sh` I never understood.

Another interesting snippet from your link:

"Furthermore, on systems that support executable scripts (the "#!" construct), it is recommended that applications using executable scripts install them using getconf PATH to determine the shell pathname and update the "#!" script appropriately as it is being installed (for example, with sed)."

So there could be systems which does not support shebang yet claiming to be POSIX?

1 comments

Why can't we just write `#!sh` I never understood.

It's because #! is handled by the kernel, but the process environment is not parsed by the kernel.

Parsing PATH should not be that hard.
Sure add arbitrary user input string parsing to the privileged kernel in a place where programs are launched. The CVE database is pretty sparse as it is and could use a good churning.

So, assuming the string is parsed safely and securely, does the kernel have enough semantic knowledge of paths to know which service to pass it to? Are the services guaranteed to be loaded and running at all times? Or is there an underlying architectural assumption that the kernel is a Linux-style monolith and POSIX no longer applies to micro- and nano-kernel systems?

It isn't... now. On a PDP-11 with 40 kW of RAM, on the other hand...