Martijn Dekker dixit:
>Martijn Dekker schreef op 27-02-16 om 04:44:
>> That means it should be possible to do
>>
>> save_options=$(set +o)
No, the rationale says something about dotfiles. so probably:
set +o >tempfile
. ./tempfile
>Hmm. "-o interactive" is killing that with an "interactive: bad option"
>error.
[…]
>Ah ha! I see now: the 'interactive' option is turned off in subshells
>(including command substitutions), so the output of
That should work with the construction I gave above.
>This clearly needs more work. Perhaps those two options should simply be
>blacklisted from "set +o" output? Thoughts?
I see two different problems, one is easier to tackle.
Your patch is fine but it doesn’t touch the manpage,
which says set +o shows the long names of all currently
enabled options. (Easy to fix, but a change in the base
language, so I’m holding this off for R53 and won’t add
it to R52c with the accumulating bugfixes.)
Moreover, we have flags that, behind the scenes, are not
0 or 1 but, for example, 2 until someone sets them manually.
ksh93 tackles this rather elegantly:
tg@blau:~ $ ksh93
ksh93:/home/tg $ set -o emacs
ksh93:/home/tg $ set -o >x; rs <x
Current option settings login_shell off
allexport off markdirs off
bgnice on monitor on
braceexpand on multiline off
clobber on notify off
emacs on pipefail off
errexit off privileged off
exec on rc on
glob on restricted off
globstar off showme off
gmacs off trackall off
histexpand off unset on
ignoreeof off verbose off
interactive on vi off
keyword off viraw on
letoctal off xtrace off
log on
ksh93:/home/tg $ set +o
set --default --bgnice --braceexpand --emacs --monitor --viraw
While I won’t add --gnu-long-options, ever, this is something
that could achieve the desired effect. (There’s also another
tristate option planned.)
I’ll put the issue on my TODO only, for now, but thanks anyway.
Ah, another thing your patch won’t catch:
set -o posix; set -o braceexpand; set +o
The output of set +o must have -o braceexpand AFTER -o posix
(and ±o sh) as turning on one of the latter turns off the
former as side effect.
bye,
//mirabilos
--
“It is inappropriate to require that a time represented as
seconds since the Epoch precisely represent the number of
seconds between the referenced time and the Epoch.”
-- IEEE Std 1003.1b-1993 (POSIX) Section B.2.2.2