1
0
Fork 0
mirror of git://git.code.sf.net/p/cdesktopenv/code synced 2025-02-15 04:32:24 +00:00
cde/TODO
Martijn Dekker 7b82c338da Make 'redirect' a regular builtin instead of an alias of 'exec'
This commit converts the redirect='command exec' alias to a regular
'redirect' builtin command that only accepts I/O redirections, which
persist as in 'exec'. This means that:
* 'unlias -a' no longer removes the 'redirect' command;
* users no longer accidentally get logged out of their shells if
  they type something intuitive but wrong, like 'redirect ls >file'.

This should not introduce any legitimate change in behaviour. If
someone did accidentally pass non-redirection arguments to
'redirect', unexpected behaviour would occur; this now produces
an 'incorrect syntax' error.

src/cmd/ksh93/bltins/misc.c: b_exec():
- Recognise 'redirect' when parsing options.
- If invoked as 'redirect', produce error if there are arguments.

src/cmd/ksh93/data/aliases.c:
- Remove redirect='command exec' alias.

src/cmd/ksh93/data/builtins.c:
- Update/improve comments re ordering.
- Add 'redirect' builtin entry.
- sh_optexec[]: Abbreviate redirection-related documentation;
  refer to redirect(1) instead.
- sh_optredirect[]: Add documentation.

src/cmd/ksh93/include/builtins.h:
- Add SYSREDIR parser ID, renumbering those following it.
- Improve comments.
- Add extern sh_optredirect[].

src/cmd/ksh93/sh.1:
- exec: Abbreviate redirection-related documentation; refer to
  'redirect' instead.
- redirect: Add documentation.

src/cmd/ksh93/sh/xec.c:
- Recognise SYSREDIR parser ID in addition to SYSEXEC when
  determining whether to make redirections persistent.

src/cmd/ksh93/tests/io.sh:
- To regress-test the new builtin, change most 'command exec' uses
  to 'redirect'.
- Add tests verifying the exit behaviour of 'exec', 'command exec',
  'redirect' on redirections.
2020-06-12 04:54:33 +02:00

98 lines
4.3 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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, HP-UX, 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'
- source='command .'
Keep these default aliases for the benefit of interactive shells:
+ history='hist -l'
+ r='hist -s'
+ stop='kill -s STOP'
+ suspend='kill -s STOP $$'
______
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.