Martijn Dekker schreef op 27-02-16 om 04:44:
> 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"
Hmm. "-o interactive" is killing that with an "interactive: bad option"
error.
Yet, misc.c contains this bit of code:
if ((i != (size_t)-1) && (set ? 1U : 0U) == Flag(i))
/*
* Don't check the context if the flag
* isn't changing - makes "set -o
interactive"
* work if you're already interactive.
Needed
* if the output of "set +o" is to be used.
*/
;
And if I manually experiment with "set -o", then it works as the comment
above says. But there must be some kind of bug in there because evalling
the output of the patched "set +o" outputs the "interactive: bad option"
error.
$ eval "$(set +o)"
../build/mksh: set: interactive: bad option
Ah ha! I see now: the 'interactive' option is turned off in subshells
(including command substitutions), so the output of
set +o
is not the same as that of
(set +o)
Hmm. And the "monitor" (job control) option is also turned off in subshells.
This clearly needs more work. Perhaps those two options should simply be
blacklisted from "set +o" output? Thoughts?
- M.