NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: standards/42828: Almquist shell always evaluates the contents of ${ENV} even if non-interactive
The following reply was made to PR standards/42828; it has been noted by GNATS.
From: Richard Hansen <rhansen%bbn.com@localhost>
To: Robert Elz <kre%munnari.OZ.AU@localhost>
Cc: gnats-bugs%NetBSD.org@localhost, standards-manager%NetBSD.org@localhost,
netbsd-bugs%NetBSD.org@localhost
Subject: Re: standards/42828: Almquist shell always evaluates the contents
of ${ENV} even if non-interactive
Date: Fri, 19 Feb 2010 14:36:53 -0500
>> Cross-platform scripts can't rely on NetBSD's nonstandard behavior,
>
> One of us is confused about what $ENV is for? What scripts are ever going
> to
> set that (clear(unset) it perhaps, but set it?)
My .profile sets ENV. (By "script" I meant a file containing
environment setup commands. That was not the best word to use, but I
couldn't think of a better word and I thought that context would make
the meaning clear. I apologize for the imprecision. In the future I'll
use "script" to only refer to executable files beginning with the
'#!/bin/sh' shebang.)
> Particularly the way you expect it to work
It's not just me; everyone under the impression that NetBSD conforms to
POSIX also expects it.
> - where it applies only to interactive shells, which isn't
> something many scripts ever care about.
>
> Do you have a real example of something that breaks (other than a
> conformance
> test) because of this? That is, excluding user environments, we know
> they're
> different.
Why exclude user environments? The purpose of ${ENV} is to customize
the user's interactive shell.
This bug broke my dot files, which is how I discovered it. I just
installed NetBSD for the first time the other day, and my first
experience was watching it lock up after copying my dot files from a
Linux machine. The freeze was thanks to a fork bomb that wouldn't have
happened had NetBSD's shell conformed to the POSIX spec. Ctrl-C
eventually worked, but only after several minutes of unwinding the
process stack.
>> but I believe the long-term benefit from standards compliance will outweigh
>> the short-term pain.
>
> Better long term benefit would be to convince the standard to be rational.
Good point.
> We don't achieve that (not any hope of achieving that) if everyone just does
> what they say because they say it, and not because it is the right thing to
> do.
Likewise, the standard won't change because the NetBSD community
silently resists it; someone has to fight for change. I don't have the
time to champion the cause. Would you be willing to take this up with
the POSIX working group?
> Following the standards is great when it is a matter of a choice between
> two ways of which we could pick either - and sometimes when it is a matter
> of
> adding something that we don't really see the need for, but does no real
> harm
> to have - but never when their design is flawed.
I agree that the POSIX design is limited relative to the NetBSD design,
but I would not call it flawed. Suboptimal perhaps, but not flawed.
Flawed implies that there are legitimate use cases that are not
supported, but I have not yet come across any such use cases. Can you
provide an example where a user needs ${ENV} evaluated upon invocation
of every non-interactive shell?
Perhaps the flaw is in NetBSD's design: The ${ENV} file can arbitrarily
modify the shell execution environment (change the working directory,
modify positional parameters, close file descriptors, trap signals,
define functions, set shell options, etc.). This means that shell
script writers can't rely on a consistent initial environment. It is
doubtful this would be a significant problem in practice, but in theory
this could lead to bugs that appear to be in a script file but are
actually caused by the user's ${ENV} file.
I want to pause and wax introspective for a moment. A number of BSD
fans give Linux users a hard time, but due to this bug my first
impression was that NetBSD is half-baked; that it fails to conform to
even the pedestrian parts of POSIX. I know that bugs happen so I'm
willing to forgive flaws and even contribute to fixes, but only if the
community respectfully deals with legitimate user complaints. The
antagonistic response I've received to this bug is disheartening and
makes me disinclined to contribute to NetBSD in the future.
-Richard
Home |
Main Index |
Thread Index |
Old Index