Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: How do I change the subshell to something other than /bin/sh?



On Thu, Oct 04, 2007 at 05:45:07PM +0100, Peter Stephenson wrote:
> "Julio Garcia" wrote:
> > My problem is this. I am trying to run some scripts that I cannot change 
> > which assume capabilities found in bash. I know that zsh will execute them 
> > correctly as well. However, when I just invoke them from the zsh command 
> > line, they run under /bin/sh and fail. For example, I have a test script 
> > that looks like this:
> > 
> > logsol10-1 ~ > cat x.sh
> > 
> > echo $0
> > 
> > ps
> 
> If you really can't change the script (and hence can't add a #! line),
> you are stuck with running "zsh ./x.sh" wherever you call the script, or
> some equivalent of that.  The decision about which interpreter to run
> for a file that isn't executable is made by the operating system, so
> the's no way of changing it at the user level.  So the question is
> really about how you're calling the script and how much you can change
> at that point.
[...]

On most system, the execve() of a script that doesn't have a #!
line will return with ENOEXEC. In which case, it will be zsh
that will run /bin/sh (if it doesn't find a NUL character in the
first 64 bytes of the file).

That's also what the exec*p() type libc functions do, except that
those may not run /bin/sh but whichever shell is required by the
standard they implement and don't search for NUL bytes.

Maybe in sh emulation, zsh could call itself in sh emulation in
that case?

-- 
Stéphane



Messages sorted by: Reverse Date, Date, Thread, Author