[X-Unix] awk
William H. Magill
magill at mcgillsociety.org
Thu Jan 8 12:49:14 PST 2004
On 08 Jan, 2004, at 04:33, Stroller wrote:
> On Jan 8, 2004, at 7:37 am, Eugene Lee wrote:
>> On Wed, Jan 07, 2004 at 08:46:38PM +0000, Stroller wrote:
>> : On Jan 7, 2004, at 5:41 pm, Eugene Lee wrote:
>> : >:
>> : >: There are annoying differences between "standard Unix" versions
>> of the
>> : >: utilities and their GNU counterparts. Usually they Unix versions
>> are
>> : >: compatible with the GNU versions, but the GNU versions are not
>> : >: compatible with the Unix versions. ... Just as scripts written
>> for
>> : >: /bin/sh will work in /bin/ksh or /bin/bash ... scripts written
>> for
>> : >: either ksh or zsh will not run in sh.
>> : >
>> : >Too bad /bin/bash is the same as /bin/sh. :-)
>> :
>> : Excuse me if I missed the joke, but from `man bash`:
>> :
>> : DESCRIPTION
>> : Bash is an sh-compatible command language interpreter
>> that executes
>> : commands read from the standard input or from a file. Bash
>> also incor-
>> : porates useful features from the Korn and C shells (ksh and
>> csh).
>>
>> Well, bash also has useful features from ksh and csh, that means that
>> these features are not available in old sh. Therefore, any bash
>> script
>> that uses any of these new features is not guaranteed to work on a
>> machine that has the original sh and not bash. This is just another
>> example of a GNU version of a tool (i.e. bash) is not compatible with
>> the Unix version (i.e. sh).
>
> I think you missed the part I quoted in which I said:
>
> INVOCATION
> ...
> If bash is invoked with the name sh, it tries to mimic the
> startup
> behavior of historical versions of sh as closely as
> possible, while
> conforming to the POSIX standard as well.
>
> So if one is writing a script which one wishes to be cross-platform,
> one simply writes it with the header "#!/bin/sh" and any of Bash's
> advanced features will be ignored; one will only be able to use sh
> syntax in that script.
I do not believe that is true. I believe that bash will always honor
its own syntax. (But since I don't use bash, I've never tested it.)
The INVOCATION paragraph you refer to simply describes which startup
files are read - ~/.profile and /etc/profile only, not what syntax is
observed.
"Since a shell invoked as sh does not attempt to read and execute
commands from any other startup files, the --rcfile option has
no effect."
Other than that...
A) OS X does NOT have a separate /bin/sh -- it is a link to /bin/bash.
(The same as csh is a link to tcsh.)
B) If you write a script which begins #!/bin/sh it is an "sh" script,
not a bash or ksh script. You should not be able to use any "advanced"
syntax in bash with the "#!/bin/sh" invocation, but I've never tested
it to see if it is true.
C) if you want "#!/bin/ksh" compatibility, you have to use zsh feature
-- "emulate ksh."
D) Bash Bugs: "There are some subtle differences between bash and
traditional versions
of sh, mostly because of the POSIX
specification."
[Note: ksh is the POSIX shell, and historically at least, ksh
scripts did not run under
bash without modifications.]
T.T.F.N.
William H. Magill
# Beige G3 - Rev A motherboard - 768 Meg
# Flat-panel iMac (2.1) 800MHz - Super Drive - 768 Meg
# PWS433a [Alpha 21164 Rev 7.2 (EV56)- 64 Meg]- Tru64 5.1a
# XP1000 - [Alpha EV6]
magill at mcgillsociety.org
magill at acm.org
magill at mac.com
More information about the X-Unix
mailing list