On 03/03/2019 13:57, Herbert Xu wrote:
On Sat, Mar 02, 2019 at 01:28:44PM +0000, Harald van Dijk wrote:
That is *a* real bug here, not *the* real bug. This leaves the buggy
behaviour of the "command" built-in intact in the test case I included in
the message you replied to.
I don't quite understand. Could you explain what is still buggy
after the following patch?
I gave this example in my previous message:
command . /dev/stdin <<EOF
set -o invalid
echo a
EOF
echo b
Ordinarily, "set -o invalid" is a "special built-in utility error", for
which the consequence is that a non-interactive shell "shall exit". If
it weren't a special built-in utility, it would be an "other utility
(not a special built-in) error", for which a non-interactive shell
"shall not exit".
The effect of the command built-in is that "if the command_name is the
same as the name of one of the special built-in utilities, the special
properties in the enumerated list at the beginning of Special Built-In
Utilities shall not occur." This is ambiguous as to whether it is just
about the special properties associated with the . command, or whether
it includes those associated with the set command called indirectly, but
it must be one or the other. If it includes the set command, then the
shell shall not exit, and the correct output is a followed by b. If it
does not include the set command, then the shell shall exit, and the
correct output is nothing. dash outputs b, which is wrong in either case.
Cheers,
Harald van Dijk