Shell execution ( [was] Re: Value of $? lost in the beginning
of a function.)
marka at isc.org
Mon Jul 20 01:02:50 UTC 2009
In message <4ad871310907191717g1ed90be7y92250f2addc38d43 at mail.gmail.com>, Glen
> Possibly off-topic...
> 2009/7/19 Glen Barber <glen.j.barber at gmail.com>:
> > 2009/7/19 Romain Tarti=E8re <romain at blogreen.org>:
> >> Hi Glen,
> >> On Sun, Jul 19, 2009 at 04:32:28PM -0400, Glen Barber wrote:
> >>> > % sh foo.sh
> >>> > % zsh foo.sh
> >>> > % bash foo.sh
> >>> What happens if you replace '#!/bin/sh' with '#!/usr/local/bin/zsh' ?
> >> This is not related to my problem since I am not running the script
> >> using ./foo.sh but directly using the proper shell. =A0sh just behaves
> >> differently, that looks odd so I would like to know if it is a bug in sh
> >> or if there is no specification for this and the behaviour depends of
> >> the implementation of each shell, in which case I have to tweak the
> >> script I am porting to avoid this construct (passing $? as an argument
> >> for example).
> >> Romain
> > My understanding was this:
> > If you specify 'sh foo.sh' at the shell, the script will be run in a
> > /bin/sh shell, _unless_ you override the shell _in_ the script.
> > Ie, 'sh foo.sh' containing '#!/bin/sh' being redundant, but 'zsh
> > foo.sh' containing '#!/bin/sh' would execute using zsh.
> I meant to say in the last line: "'#!/bin/sh' would override the 'zsh' shel=
> Can someone enlighten me if I am wrong about this?
> Glen Barber
> freebsd-stable at freebsd.org mailing list
> To unsubscribe, send any mail to "freebsd-stable-unsubscribe at freebsd.org"
"#!" is used to define the interpretor when the file is exec'd.
perl, AFAIK, is the only interpretor that will look at what is after
the "#!" and modify it's behaviour. All other a interpretors (shells)
treat "#!" as a comment.
Some shells used to examine the executable about to be called and
looked for "#!" and invoke the correct interpretor. This was how
"#!" was supported before kernels has support for "#!". It was all
done in userland.
Mark Andrews, ISC
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742 INTERNET: marka at isc.org
More information about the freebsd-stable