Hi Richard, thanks for the good bug report plus patch. Hi Herbert, please see below, and http://bugs.debian.org/456990 with pointers to freebsd and netbsd ash.
I agree this is a bug and should be fixed, Richard's patch looks good to me. Regards, Gerrit. On Tue, Dec 18, 2007 at 05:02:46PM -0500, Richard M Kreuter wrote: > The dash(1) in Debian stable does not support "set +o" in the manner > specified by SUSv3: > > |+o > | Write the current option settings to standard output in a format > | that is suitable for reinput to the shell as commands that > | achieve the same options settings. > > (citation from > http://www.opengroup.org/onlinepubs/009695399/utilities/set.html) > > Instead, dash's "set +o" prints the shell's options in a > human-readable format. > > Here is a simple test program that exercises this feature; it works as > I believe is required under bash, but not under dash. > > # Save the shell's options > set +o > /tmp/settings-commands > set -o | sort > /tmp/settings-before > # Change some options. > set -v > set -f > set -x > set +o emacs > set -o vi > # Try to restore our options. > . /tmp/settings-commands > set -o | sort > /tmp/settings-after > # Compare. > diff /tmp/settings-before /tmp/settings-after > > I believe the following small patch adds this feature to dash, and > documents it in the manual page: > > --- src/options.c.orig 2005-11-25 22:17:55.000000000 -0500 > +++ src/options.c 2007-12-18 16:37:33.000000000 -0500 > @@ -240,10 +240,18 @@ > int i; > > if (name == NULL) { > - out1str("Current option settings\n"); > - for (i = 0; i < NOPTS; i++) > - out1fmt("%-16s%s\n", optnames[i], > - optlist[i] ? "on" : "off"); > + if (val) { > + out1str("Current option settings\n"); > + for (i = 0; i < NOPTS; i++) > + out1fmt("%-16s%s\n", optnames[i], > + optlist[i] ? "on" : "off"); > + } else { > + for (i = 0; i < NOPTS; i++) > + out1fmt("set %s %s\n", > + optlist[i] ? "-o" : "+o", > + optnames[i]); > + > + } > } else { > for (i = 0; i < NOPTS; i++) > if (equal(name, optnames[i])) { > --- src/dash.1~ 2005-11-25 22:17:55.000000000 -0500 > +++ src/dash.1 2007-12-18 16:16:04.000000000 -0500 > @@ -1779,6 +1779,11 @@ > If options are given, it sets the specified option > flags, or clears them as described in the section called > .Sx Argument List Processing . > +As a special case, if the option is -o or +o and no argument is > +supplied, the shell prints the settings of all its options. If the > +option is -o, the settings are printed in a human-readable format; if > +the option is +o, the settings are printed in a format suitable for > +reinput to the shell to affect the same option settings. > .Pp > The third use of the set command is to set the values of the shell's > positional parameters to the specified args. > > -- System Information: > Debian Release: 4.0 > APT prefers stable > APT policy: (500, 'stable') > Architecture: powerpc (ppc) > Shell: /bin/sh linked to /bin/bash > Kernel: Linux 2.6.18-5-powerpc > Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) > > Versions of packages dash depends on: > ii libc6 2.3.6.ds1-13etch2 GNU C Library: Shared libraries > > dash recommends no packages. > > -- debconf information: > dash/sh: false > > -- To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED]