Some sh(1) plans for 10.0
Ulrich Spörlein
uqs at spoerlein.net
Wed Dec 14 14:59:09 UTC 2011
On Tue, 2011-12-13 at 23:00:20 +0100, Jilles Tjoelker wrote:
> Here are some changes that may happen to sh(1) in 10.0.
>
> * Report output errors in builtins (error message and exit status 2).
> For example: echo >&-. PR bin/158206.
>
> * Special expansion for assignments in export/readonly/local.
> This expands assignments in a command like export a=~ b=$1 as if the
> "export" were not there (tilde expansion after = and :, no pathname
> generation, no word splitting).
> This feature has been available in ksh/bash/zsh for a long time and
> has been proposed and defined for a new version of POSIX at
> http://austingroupbugs.net/view.php?id=351
> Users sometimes get confused by this not working and if POSIX plans to
> add it, why not add it here?
Woa, looks like thats a fucked up situation overall ...
> * 'time' keyword, allowing timing of pipelines and compound commands.
> This works such that if any options are specified, it will fall back
> to /usr/bin/time. The proposed changes to POSIX are fairly extensive
> including changes to the ! keyword which will break some of our
> scripts and a TIMEFORMAT variable. A somewhat stripped version may be
> useful. Note that a shell-based version cannot and will not support
> SIGINFO. This is also the case with the versions in tcsh, bash and
> zsh.
> http://austingroupbugs.net/view.php?id=267
>
> * Conditional command [[ ... ]] much like ksh. This is being discussed
> in the Austin Group at this time. I don't really like the duplication
> with [ ... ] and case, considering that they work well in the POSIX
> spec and our implementation. Some reasons to add it anyway are that it
> is slightly easier to use and cleaner in syntax, that < and > can use
> locale-specific ordering (strcoll) (but when are strings compared for
> greater-than in a shell script?) and that a regex match could be
> added.
> A slightly older proposal is at
> https://docs.google.com/document/d/1Gd9r0f0rmmUIZlBnO4NyhTz2q-_1PHHGVCHAglFbJoY/edit
>
> * vfork support, with an environment variable to opt out.
>
> * Executing commands in subshell environments without forking in more
> situations (saving and restoring state manually instead).
Is this really worth the effort and the added complexity? I hope there
will be benchmarks showing that this is actually saving us non-negligible
time.
> * Here document expansion without a fork. A simple implementation would
> make expansion side effects persistent and errors fatal while a more
> complicated implementation could avoid that. A fork is still needed if
> the here document cannot be written into a pipe without blocking.
> (This could be avoided with ugly SIGIO magic but the case seems too
> rare to bother.)
>
> * If execve() fails even though the file exists and is executable, and
> it should not be run using /bin/sh ([ENOEXEC] and text file), give a
> clearer error message. Example: #! interpreter does not exist.
> Some rework could make all execve() errors detected in the child
> process of this kind.
Good stuff overall, keep up the good work!
Uli
More information about the freebsd-arch
mailing list