mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-13 11:42:21 +00:00
The 'command' name can now result from an expansion, e.g.: c=command; "$c" ls set -- command ls; "$@" both work now. This fixes BUG_CMDEXPAN. If -o posix is on, 'command' now disables not only the "special" but also the "declaration" properties of builtin commands that it invokes. This is because POSIX specifies 'command' as a simple regular builtin, and any command name following 'command' is just an argument to the 'command' command, so there is nothing that allows any further arguments (such as assignment-arguments) to be treated specially by the parser. So, if and only if -o posix is on: a. Arguments that start with a variable name followed by '=' are always treated as regular words subject to normal shell syntax. b. Since assignment-arguments are not processed as assignments before the command itself, 'command' can now stop the shell from exiting (as required by the standard) if a command that it invokes (such as 'export') tries to modify a readonly variable. This fixes BUG_CMDSPEXIT. Most of 'command' is integrated in the parser and parse tree executer, so that is where it needed fixing. src/cmd/ksh93/sh/parse.c: simple(): - If the posix option is on, do not skip past SYSCOMMAND so that any declaration builtin commands that are arguments to 'command' are not detected and thus not treated specially at parsetime. src/cmd/ksh93/sh/xec.c: sh_exec(): - When detecting SYSCOMMAND in order to skip past it, not only compare the Namval_t pointer 'np' to SYSCOMMAND, but also handle the case where that pointer is NULL, as when the command name results from an expansion. In that case, search the function tree shp->fun_tree for the name and see if that yields the SYSCOMMAND pointer. fun_tree is initialised with a dtview to bltin_tree, so searching fun_tree instead allows for overriding 'command' with a shell function (which the POSIX standard requires us to allow). src/cmd/ksh93/sh.1, src/cmd/ksh93/data/builtins.c: - Update documentation to match these changes. - Various related edits and improvements. src/cmd/ksh93/tests/builtins.sh: - Check that 'command' works if resulting from an expansion. - Check that 'command' can be overridden by a shell function.
37 lines
1.6 KiB
Text
37 lines
1.6 KiB
Text
TODO for AT&T ksh93, 93u+m bugfix branch
|
|
|
|
______
|
|
Fix regression test failures:
|
|
|
|
- On OpenBSD, there are 15 locale-related test failures in variables.sh.
|
|
- There are many regression test failures on NetBSD.
|
|
|
|
______
|
|
Fix build system:
|
|
|
|
- ksh does not currently build on AIX or QNX.
|
|
- Reimport the removed nmake. It is necessary for changes in Makefiles
|
|
to take effect. The machine-generated Mamfiles are now used as a fallback,
|
|
but they are not meant to be edited by hand.
|
|
|
|
______
|
|
Fix currently known bugs affecting shell scripting. These are identified by
|
|
their modernish IDs. For exact details, see code/comments in:
|
|
https://github.com/modernish/modernish/tree/0.16/lib/modernish/cap/
|
|
|
|
- BUG_BRACQUOT: shell quoting within bracket patterns has no effect. This
|
|
bug means the '-' retains it special meaning of 'character range', and an
|
|
initial ! (and, on some shells, ^) retains the meaning of negation, even
|
|
in quoted strings within bracket patterns, including quoted variables.
|
|
|
|
- BUG_CSUBSTDO: If standard output (file descriptor 1) is closed before
|
|
entering a $(command substitution), and any other file descriptors are
|
|
redirected within the command substitution, commands such as 'echo' will
|
|
not work within the command substitution, acting as if standard output is
|
|
still closed.
|
|
|
|
- BUG_IFSGLOBS: In glob pattern matching (as in case or parameter
|
|
substitution with # and %), if IFS starts with ? or * and the "$*"
|
|
parameter expansion inserts any IFS separator characters, those characters
|
|
are erroneously interpreted as wildcards when quoted "$*" is used as the
|
|
glob pattern.
|