mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-13 11:42:21 +00:00
The 'source' alias is now converted into a regular built-in command so that 'unalias -a' does not remove it, and something like cmd=source; $cmd name args will now work. This is part of the project to replace default aliases that define essential commands by proper builtins that act identically (except you now get the actual command's name in any error/usage messages). src/cmd/ksh93/data/aliases.c: - Remove 'source' default alias. src/cmd/ksh93/data/builtins.c, src/cmd/ksh93/include/builtins.h: - Define 'source' regular builtin with extra parser ID "SYSSOURCE". Same definition as '.', minus the BLT_SPC flag indicating a special builtin. This preserves the behaviour of 'command .'. - Update sh_optdot[] to include info for 'source --man'. (Note that \f?\f expands to the current command name. This allows several commands to share a single --man page.) src/cmd/ksh93/sh/parse.c: - In the two places that SYSDOT is checked for, also check for SYSSOURCE, making sure the two commands are parsed identically. src/cmd/ksh93/sh.1: - Remove 'source' default alias. - Document 'source' regular builtin.
99 lines
4.5 KiB
Text
99 lines
4.5 KiB
Text
TODO for AT&T ksh93, 93u+m bugfix branch
|
||
|
||
______
|
||
Fix regression test failures:
|
||
|
||
- On FreeBSD, there is a test failure in [[ -N file ]] in bracket.sh.
|
||
- On OpenBSD, there are 15 locale-related test failures in variables.sh.
|
||
|
||
______
|
||
Fix build system:
|
||
|
||
- ksh does not currently build on NetBSD, AIX, Solaris, 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.
|
||
- Reimport the removed pty command (for scripting interactive sessions). This
|
||
is necessary for the pty.sh regression tests to work, which test ksh as an
|
||
interactive shell. We want to avoid breaking the interactive shell, too.
|
||
|
||
______
|
||
Fix or remove broken or misguided default aliases:
|
||
|
||
- Make proper builtins out of the following scripting-related aliases, so
|
||
that 'unalias -a' does not eliminate them. If done correctly, this causes
|
||
no other change in behaviour. It would be good practice to 'unalias -a' in
|
||
a script to start with a clean slate, except ksh has always made that
|
||
impossible without losing these. Default aliases should be to facilitate
|
||
interactive use.
|
||
- autoload='typeset -fu'
|
||
- compound='typeset -C'
|
||
- float='typeset -lE'
|
||
- functions='typeset -f'
|
||
- integer='typeset -li'
|
||
- nameref='typeset -n'
|
||
- stop='kill -s STOP'
|
||
- suspend='kill -s STOP $$'
|
||
Keep these default aliases for the benefit of interactive shells:
|
||
+ history='hist -l'
|
||
+ r='hist -s'
|
||
To avoid interfering with shell functions by those names that POSIX
|
||
scripts may set, those should only intialise on interactive shells.
|
||
|
||
______
|
||
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_CMDEXPAN: if the 'command' command results from an expansion, it acts
|
||
like 'command -v', showing the path of the command instead of executing it.
|
||
For example:
|
||
v=command; "$v" ls
|
||
or
|
||
set -- command ls; "$@"
|
||
don't work.
|
||
See also: https://github.com/att/ast/issues/963
|
||
|
||
- BUG_CMDSPASGN: preceding a "special builtin"[*] with 'command' does not
|
||
stop preceding invocation-local variable assignments from becoming global.
|
||
[*] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_14
|
||
|
||
- BUG_CMDSPEXIT: preceding a "special builtin"[*] (other than 'eval', 'exec',
|
||
'return' or 'exit') with 'command' does not always stop it from exiting
|
||
the shell if the builtin encounters error.
|
||
[*] https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_14
|
||
|
||
- 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.
|
||
|
||
- BUG_KUNSETIFS: ksh93: Can't unset IFS under very specific circumstances.
|
||
unset -v IFS is a known POSIX shell idiom to activate default field
|
||
splitting. With this bug, the unset builtin silently fails to unset IFS
|
||
(i.e. fails to activate field splitting) if we're executing an eval or a
|
||
trap and a number of specific conditions are met.
|
||
|
||
- BUG_LOOPRET2: If a 'return' command is given without a status argument
|
||
within the set of conditional commands in a 'while' or 'until' loop (i.e.,
|
||
between 'while'/'until' and 'do'), the exit status passed down from the
|
||
previous command is ignored and the function returns with status 0
|
||
instead.
|
||
|
||
- BUG_MULTIBIFS: We're on a UTF-8 locale and the shell supports UTF-8
|
||
characters in general (i.e. we don't have WRN_MULTIBYTE) – however, using
|
||
multi-byte characters as IFS field delimiters still doesn't work. For
|
||
example, "$*" joins positional parameters on the first byte of IFS instead
|
||
of the first character.
|