mirror of
git://git.code.sf.net/p/cdesktopenv/code
synced 2025-02-15 04:32:24 +00:00
This adds two long-form shell options that modify history expansion (-H/--histexpand). If --histreedit is on and a history expansion fails, the command line is reloaded into the next prompt's edit buffer, allowing corrections. If --histverify is on, the results of a history expansion are not immediately executed but instead loaded into the next prompt's edit buffer, allowing further changes. SH_HISTREEDIT and SH_HISTVERIFY were already handled all along in slowread() in io.c and via 'reedit' arguments to functions called there, but could not be turned on as they were only ever exposed as shopt options in the removed bash compatibility mode (in theory only, as it failed to compile). I had overlooked them until now. So, since the code is there, let's expose these options through the normal long options interface. They're working fine, and activating them actually makes history expansion tolerable to use. src/cmd/ksh93/data/options.c: - Make these options available as "histreedit" and "histverify". src/cmd/ksh93/data/builtins.c, src/cmd/ksh93/sh.1: - Document the "new" options. src/cmd/ksh93/include/defs.h: - Remove unused SH_HISTAPPEND and SH_HISTORY2 macros which were part of the removed bash compatibility code. Note that ksh does not need a histappend option as it never overwrites the history file (in the bash mode, this shopt option was a no-op).
264 lines
11 KiB
Text
264 lines
11 KiB
Text
Announcing: KornShell 93u+m 1.0.0-beta.(unreleased)
|
|
https://github.com/ksh93/ksh
|
|
|
|
In May 2020, when every KornShell (ksh93) development project was
|
|
abandoned, development was rebooted in a new fork based on the last
|
|
stable AT&T version: ksh 93u+. This new fork is called ksh 93u+m as a
|
|
permanent nod to its origin. We're restarting it at version 1.0. Seven
|
|
months after the first beta, the second one is ready. Please test this
|
|
second beta and report any bugs you find, or help us fix known bugs.
|
|
|
|
We're now the default ksh93 in some OS distributions, at least Debian
|
|
and Slackware! Even though we don't think it's stable release quality
|
|
yet, the consensus seems to be that 93u+m is already much better than
|
|
the last AT&T release.
|
|
|
|
Main developers: Martijn Dekker, Johnothan King, hyenias
|
|
|
|
Contributors: Andy Fiddaman, Anuradha Weeraman, Chase, Gordon Woodhull,
|
|
Govind Kamat, Harald van Dijk, Lev Kujawski, Marc Wilson, Ryan Schmidt,
|
|
Sterling Jensen
|
|
|
|
HOW TO GET IT
|
|
|
|
Please download the source code tarball from our GitHub releases page:
|
|
|
|
https://github.com/ksh93/ksh/releases
|
|
|
|
To build, follow the instructions in README.md or src/cmd/ksh93/README.
|
|
|
|
HOW TO GET INVOLVED
|
|
|
|
To report a bug, please open an issue at our GitHub page (see above).
|
|
Alternatively, email me at martijn@inlv.org with your report.
|
|
To get involved in development, read the brief policy information in
|
|
README.md and then jump right in with a pull request or email a patch.
|
|
See the TODO file in the top-level directory for a to-do list.
|
|
|
|
### MAIN CHANGES between 1.0.0-beta.2 and 1.0.0-(unreleased) ###
|
|
|
|
New features in built-in commands:
|
|
|
|
- Two bash-like flags for 'whence' were backported from ksh 93v-:
|
|
- 'whence -P/type -P' is an alias to the existing -p flag.
|
|
- 'whence -t/type -t' will print only the type of a command in a simple
|
|
format that is designed to be easy to use for scripts. Example:
|
|
$ type -t typeset; whence -t sh
|
|
builtin
|
|
file
|
|
|
|
- Added three options to the ulimit builtin with the same names and
|
|
functionality as in Bash:
|
|
- 'ulimit -k' sets the maximum number of kqueues.
|
|
- 'ulimit -P' sets the maximum number of pseudo-terminals.
|
|
- 'ulimit -R' sets the maximum time in microseconds a real-time process
|
|
can run before blocking.
|
|
Note that to use these options the operating system must support the
|
|
corresponding resource limit.
|
|
|
|
New features in shell options:
|
|
|
|
- The new --histreedit and --histverify options modify history expansion
|
|
(--histexpand). If --histreedit is on and a history expansion fails, the
|
|
command line is reloaded into the next prompt's edit buffer, allowing
|
|
corrections. If --histverify is on, the results of a history expansion are
|
|
not immediately executed but instead loaded into the next prompt's edit
|
|
buffer, allowing further changes.
|
|
|
|
### MAIN CHANGES between 1.0.0-beta.1 and 1.0.0-beta.2 ###
|
|
|
|
New features in built-in commands:
|
|
|
|
- 'cd' now supports an -e option that, when combined with -P, verifies
|
|
that $PWD is correct after changing directories; this helps detect
|
|
access permission problems. See:
|
|
https://www.austingroupbugs.net/view.php?id=253
|
|
|
|
- 'printf' now supports a -v option as in bash. This assigns formatted
|
|
output directly to variables, which is very fast and will not strip
|
|
final newline (\n) characters.
|
|
|
|
- The 'return' command, when used to return from a function, can now
|
|
return any status value in the 32-bit signed integer range, like on
|
|
zsh. However, due to a traditional Unix kernel limitation, $? is
|
|
still trimmed to its least significant 8 bits whenever leaving a
|
|
(sub)shell environment.
|
|
|
|
- 'test'/'[' now supports all the same operators as [[ (including =~,
|
|
\<, \>) except for the different 'and'/'or' operators. Note that
|
|
'test'/'[' remains deprecated due to its unfixable pitfalls;
|
|
[[ ... ]] is recommended instead.
|
|
|
|
Shell language changes:
|
|
|
|
- Several improvements were made to the --noexec shell code linter.
|
|
|
|
- Arithmetic expressions in native ksh mode no longer interpret a
|
|
number with a leading zero as octal in any context. Use 8#octalnumber
|
|
instead (e.g. 8#400 == 256). Arithmetic expressions now also behave
|
|
identically within and outside ((...)) and $((...)).
|
|
|
|
- POSIX compatibility mode fixes (only applicable with the --posix shell
|
|
option on):
|
|
- A leading zero is now consistently recognised as introducing an octal
|
|
number in all arithmetic contexts.
|
|
- $((inf)) and $((nan)) are now interpreted as regular variables.
|
|
- The '.' built-in no longer runs ksh functions and now only runs
|
|
files.
|
|
|
|
Bugs fixed:
|
|
|
|
- '.' and '..' are now once again completed by tab completion.
|
|
|
|
- If SIGINT is set to ignore, the interactive shell no longer exits on
|
|
Ctrl+C.
|
|
|
|
- ksh now builds and runs on Apple's new M1 hardware.
|
|
|
|
- The 'return' and 'exit' commands no longer risk triggering actual
|
|
signals by returning or exiting with a status > 256.
|
|
|
|
- Ksh no longer behaves badly when parsing a type definition command
|
|
('typeset -T' or 'enum') without executing it or when executing it in
|
|
a subshell. Types can now safely be defined in subshells and defined
|
|
conditionally as in 'if condition; then enum ...; fi'.
|
|
|
|
- Discipline functions, especially those applied to PS2 or .sh.tilde,
|
|
will no longer crash your shell upon being interrupted or throwing an
|
|
error.
|
|
|
|
- Fixed a bug that could corrupt output if standard output is closed
|
|
upon initialising the shell.
|
|
|
|
- Fixed a bug in the [[ ... ]] compound command: the '!' logical
|
|
negation operator now correctly negates another '!', e.g.,
|
|
[[ ! ! 1 -eq 1 ]] now returns 0/true. Note that this has always been
|
|
the case for 'test'/'['.
|
|
|
|
- Fixed SHLVL so that replacing ksh by itself (exec ksh) will not
|
|
increase it.
|
|
|
|
- Arithmetic expressions are no longer allowed to assign out-of-range
|
|
values to variables of types declared with enum.
|
|
|
|
- The 'time' keyword no longer makes the --errexit shell option
|
|
ineffective.
|
|
|
|
- Various bugs in libcmd built-in commands (those bound to the
|
|
/opt/ast/bin path by default) have been fixed.
|
|
|
|
- Various other crashing bugs have been fixed.
|
|
|
|
Fixes for the shcomp byte code compiler:
|
|
|
|
- shcomp is now able to compile scripts that define types using enum.
|
|
|
|
- shcomp now refuses to mess up your terminal by writing bytecode
|
|
to it.
|
|
|
|
### MAIN CHANGES between ksh 93u+ 2012-08-01 and 93u+m 1.0.0-beta.1 ###
|
|
|
|
Hundreds of bugs have been fixed, including many serious/critical bugs.
|
|
This includes upstreamed patches from OpenSUSE, Red Hat, and Solaris, fixes
|
|
backported from the abandoned 93v- beta and ksh2020 fork, as well as many
|
|
new fixes from the community. See the NEWS file for more information, and
|
|
the git commit log for complete documentation of every fix. Incompatible
|
|
changes have been minimised, but not at the expense of fixing bugs. For a
|
|
list of potentially incompatible changes, see src/cmd/ksh93/COMPATIBILITY.
|
|
|
|
Though there was a "no new features, bugfixes only" policy, some new
|
|
features were found necessary, either to fix serious design flaws or to
|
|
complete functionality that was evidently intended, but not finished.
|
|
Below is a summary of these new features.
|
|
|
|
New command line editor features:
|
|
|
|
- The forward-delete and End keys are now handled as expected in the
|
|
emacs and vi built-in line editors.
|
|
|
|
- In the vi and emacs line editors, repeat count parameters can now also
|
|
be used for the arrow keys and the forward-delete key. E.g., in emacs
|
|
mode, <ESC> 7 <left-arrow> will now move the cursor seven positions to
|
|
the left. In vi control mode, this would be entered as: 7 <left-arrow>.
|
|
|
|
New shell language features:
|
|
|
|
- The &>file redirection shorthand (for >file 2>&1) is now available for
|
|
all scripts and interactive sessions and not only for profile/login
|
|
scripts, bringing ksh 93u+m in line with mksh, bash, and zsh.
|
|
|
|
- File name generation (a.k.a. pathname expansion, a.k.a. globbing) now
|
|
never matches the special navigational names '.' (current directory)
|
|
and '..' (parent directory). This change makes a pattern like .*
|
|
useful; it now matches all hidden files (dotfiles) in the current
|
|
directory, without the harmful inclusion of '.' and '..'.
|
|
|
|
- Tilde expansion can now be extended or modified by defining a
|
|
.sh.tilde.get or .sh.tilde.set discipline function. This replaces a
|
|
2004 undocumented attempt to add this functionality via a .sh.tilde
|
|
command, which never worked and crashed the shell. See the manual for
|
|
details on the new method.
|
|
|
|
- A new ${.sh.pid} variable has been added with similar functionality to
|
|
Bash's $BASHPID variable. It is set to the current shell's PID, unlike
|
|
$$ (which is set to the main shell's PID). In virtual subshells
|
|
${.sh.pid} is not changed from its previous value, while in forked
|
|
subshells ${.sh.pid} is set to the subshell's process ID.
|
|
|
|
New features in built-in commands:
|
|
|
|
- Usage error messages now show the --help/--man self-documentation options.
|
|
|
|
- Path-bound built-ins (such as /opt/ast/bin/cat) can now be executed by
|
|
invoking the canonical path, so the following will now work as expected:
|
|
$ /opt/ast/bin/cat --version
|
|
version cat (AT&T Research) 2012-05-31
|
|
|
|
- 'command -x' now looks for external commands only, skipping built-ins.
|
|
In addition, its xargs-like functionality no longer freezes the shell on
|
|
Linux and macOS, making it effectively a new feature on these systems.
|
|
|
|
- 'redirect' now checks if all arguments are valid redirections before
|
|
performing them. If an error occurs, it issues an error message instead
|
|
of terminating the shell.
|
|
|
|
- 'suspend' now refuses to suspend a login shell, as there is probably no
|
|
parent shell to return to and the login session would freeze.
|
|
|
|
- 'times' now gives high precision output in a POSIX compliant format.
|
|
|
|
- 'typeset' now gives an informative error message if an incompatible
|
|
combination of options is given.
|
|
|
|
- 'whence -v/-a' now reports the location of autoloadable functions.
|
|
|
|
New features in shell options:
|
|
|
|
- A new --globcasedetect shell option is added on OSs where we can
|
|
check for a case-insensitive file system (currently Windows/Cygwin,
|
|
macOS, Linux and QNX 7.0+). When this option is turned on, file name
|
|
generation (globbing), as well as file name tab completion on
|
|
interactive shells, automatically become case-insensitive on file
|
|
systems where the difference between upper and lower case is ignored
|
|
for file names. This is transparently determined for each directory, so
|
|
a path pattern that spans multiple file systems can be part
|
|
case-sensitive and part case-insensitive.
|
|
|
|
- A new --nobackslashctrl shell option disables the special escaping
|
|
behaviour of the backslash character in the emacs and vi built-in
|
|
editors. Particularly in the emacs editor, this makes it much easier to
|
|
go backward, insert a forgotten backslash into a command, and then
|
|
continue editing without having your next cursor key replace your
|
|
backslash with garbage. Note that Ctrl+V (or whatever other character
|
|
was set using 'stty lnext') always escapes all control characters in
|
|
either editing mode.
|
|
|
|
- A new --posix shell option has been added to ksh 93u+m that makes the
|
|
ksh language more compatible with other shells by following the POSIX
|
|
standard more closely. See the manual page for details. It is enabled by
|
|
default if ksh is invoked as sh, otherwise it is disabled by default.
|
|
|
|
- Enhancement to -G/--globstar: symbolic links to directories are now
|
|
followed if they match a normal (non-**) glob pattern. For example, if
|
|
'/lnk' is a symlink to a directory, '/lnk/**' and '/l?k/**' now work as
|
|
you would expect.
|