[CentOS] Real sh? Or other efficient shell for non-interactive scripts

Stephen Harris lists at spuddy.org
Fri Apr 24 19:54:03 UTC 2015


On Fri, Apr 24, 2015 at 09:47:24AM -0700, Gordon Messmer wrote:
> On 04/24/2015 03:57 AM, Pete Geenhuizen wrote:
> >if you leave it out the script will run in whatever environment it
> >currently is in.
> 
> I'm reasonably certain that a script with no shebang will run with 
> /bin/sh.  I interpret your statement to mean that if a user is using ksh 

"It depends".

On older Unix-type systems which didn't understand #! then the shell
itself did the work.  At least csh did (sh didn't necessary).  If the
first character was a # then csh assumed it was a csh script, otherwise
it assumed a sh script.  That's why a lot of real old scripts began with :

> and enters the path to such a script, it would also run in ksh.  That 
> would only be true if you "sourced" the script from your shell.

So on CentOS 5 with ksh93 as my shell

  % cat x
  echo ${.sh.version}

Note that it's a simple one liner with no #!

  % ./x
  Version AJM 93t+ 2010-06-21

That's ksh output!

Let's change my shell to "bash" instead
  % bash
  bash-3.2$ ./x
  ./x: line 1: ${.sh.version}: bad substitution

So now it's bash that's trying to interpret it!

So "it depends" is still true :-)

Basically, without #! there (which allows it to be exec'd) the shell
determines how the file is interpreted.

-- 

rgds
Stephen



More information about the CentOS mailing list