The command 'set -o' shows the current shell options in an unspecified
format. Less well-known is the variant 'set +o', which should output the
current shell options "in a format that is suitable for reinput to the
shell as commands that achieve the same options settings".[*]

That means it should be possible to do

        save_options=$(set +o)

then change some options, then later restore the shell options with

        eval "$save_options"

On all pdksh variants (as well as zsh), 'set +o' is currently inadequate
for that purpose because it only outputs the currently active shell
options, and not the inactive ones.

Even the old ksh88, which pdksh is a clone of (and on which most of
POSIX is based), acts correctly in this regard.

The simple patch below makes 'set +o' compatible with the POSIX spec.

Thanks,

- M.

[*]
http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_25_03
    (scroll down to '+o')

Index: misc.c
===================================================================
RCS file: /cvs/src/bin/mksh/misc.c,v
retrieving revision 1.241
diff -u -r1.241 misc.c
--- misc.c	21 Jan 2016 18:25:07 -0000	1.241
+++ misc.c	27 Feb 2016 03:36:04 -0000
@@ -217,8 +217,8 @@
 		/* short version like AT&T ksh93 */
 		shf_puts(Tset, shl_stdout);
 		while (i < NELEM(options)) {
-			if (Flag(i) && OFN(i)[0])
-				shprintf(" -o %s", OFN(i));
+			if (OFN(i)[0])
+				shprintf(" %co %s", Flag(i) ? '-' : '+', OFN(i));
 			++i;
 		}
 		shf_putc('\n', shl_stdout);

Reply via email to