[CDBUG-talk] Sysadmin blog
Brian Callahan
bcallah at devio.us
Sun Nov 16 22:24:38 EST 2014
On 11/16/14 21:59, Jaime wrote:
> On Sun, Nov 16, 2014 at 9:39 PM, Brian Callahan <bcallah at devio.us> wrote:
>> So this reminds me of an oft-forgotten point in portability of shell
>> scripts: the popularity of the linuxism #!/bin/bash (though it appears it
>> has crept into Mac OS X as well, sad...).
> I was aware of the down sides of hard-coding the path to the script's
> interpreter, but I wasn't aware of an alternative. So thanks for
> sharing the /usr/bin/env tip. I have two thoughts that I hope you're
> willing to hash-out with me, though.
>
> 1) Isn't the shebang that you suggested still hardcoded? When the
> script is taken to a new OS, wouldn't there still be a risk of it
> breaking? Has env just been in Unix for so long that its always in
> /usr/bin?
You're right: env is not guaranteed to be in /usr/bin but it is the
historical location of env, so it will work on Linuxes and BSDs (and
afaik, Solaris/AIX/HP-UX). Pretty much it's an anomaly if env isn't in
/usr/bin and it's also extremely likely bash, if available, wouldn't be
in /bin on such a system anyway!
> 2) On MacOS, bash is always installed at /usr/bin/bash. My script
> uses utilities specific to MacOS to modify configuration files
> specific to MacOS in order to ease MacOS deployment. It is inherently
> irrelevent to other OSs and unable to move to another OS. So is there
> a benefit to changing the shebang to env?
Because env searches your PATH, you could install a newer/custom bash
(remember shellshock?) elsewhere and have your scripts use that new bash
without editing the script (provided your PATH is set up to hit the new
bash first).
~Brian
More information about the CDBUG-talk
mailing list