Skip site navigation (1)Skip section navigation (2)
Date:      Mon, 20 Jul 2009 11:02:43 +1000
From:      Mark Andrews <marka@isc.org>
To:        Glen Barber <glen.j.barber@gmail.com>
Cc:        stable@freebsd.org
Subject:   Re: Shell execution ( [was] Re: Value of $? lost in the beginning of a function.) 
Message-ID:  <200907200102.n6K12h1Y048534@drugs.dv.isc.org>
In-Reply-To: Your message of "Sun, 19 Jul 2009 20:17:22 -0400." <4ad871310907191717g1ed90be7y92250f2addc38d43@mail.gmail.com> 
References:  <4ad871310907191717g1ed90be7y92250f2addc38d43@mail.gmail.com> 

next in thread | previous in thread | raw e-mail | index | archive | help

In message <4ad871310907191717g1ed90be7y92250f2addc38d43@mail.gmail.com>, Glen 
Barber writes:
> Possibly off-topic...
> 
> 
> 2009/7/19 Glen Barber <glen.j.barber@gmail.com>:
> > 2009/7/19 Romain Tarti=E8re <romain@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=
> l."
> 
> Can someone enlighten me if I am wrong about this?
> 
> --=20
> Glen Barber
> _______________________________________________
> freebsd-stable@freebsd.org mailing list
> http://lists.freebsd.org/mailman/listinfo/freebsd-stable
> To unsubscribe, send any mail to "freebsd-stable-unsubscribe@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
-- 
Mark Andrews, ISC
1 Seymour St., Dundas Valley, NSW 2117, Australia
PHONE: +61 2 9871 4742                 INTERNET: marka@isc.org



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200907200102.n6K12h1Y048534>