On Tue, Oct 02, 2007 at 01:43:05PM -0600, Bob Proulx wrote:
[...]
> The AT&T ksh uses $ENV for the same purpose but does not automatically
> source a kshrc file.  Therefore a very common configuration for the
> typical user in their profile is to set ENV=$HOME/.kshrc and use it
> for all of the same things that we use a bashrc file.  But this
> creates problems for '#!/bin/ksh' scripts that then have $ENV set
> because for ksh even non-interactive scripts source $ENV.
> 
> The documented way to avoid this problem is to conditionally set the
> value of ENV.  The Bolsky & Korn, The KornShell documents this
> following snippet.
> 
>   export ENV='${FILE[(_$-=0)+(_=1)-_${-%%*i*}]}'
>   export FILE=$HOME/.kshrc
[...]

Note however that it's no longer true of ksh93 and it's not true
of many newer versions of ksh88 as that is a POSIX
non-conformance, so you should no longer need that kludge
nowadays.

And note that POSIX shs are meant to handle $ENV when
interactive and the above code is not POSIX conformant (but it's
not likely to cause any problem).

[...]
> > (as long as bash is not called as "sh" or with --posix or with
> > POSIXLY_CORRECT or SHELLOPTS=posix in its environment)
> 
> One reason that although I prefer bash as my command shell I always
> use '#!/bin/sh' for scripts.  The benefits of a standard environment
> outweigh the benefits of nice features most of the time.  When I need
> or want the feature then of course I use '#!/bin/bash' as required.

When I need a feature that a POSIX shell can't provide, then
generally that means I need something more like perl or
python...

Note that #! /bin/sh will not always give you a POSIX shell.
Sometimes, it may give you an ancient shell that your Unix
vendor keeps there for backward compatibility. "sh" has been a
lot of different shells along Unix history...

-- 
Stéphane


Reply via email to