1
0
Files
irix-657m-src/eoe/cmd/ksh/docs/RELEASE
2022-09-29 17:59:04 +03:00

475 lines
19 KiB
Plaintext

This is a list of changes that have been made since the 06/03/86 version
of ksh.
1. New features in 11/16/88
a. Additional pattern matching capabilities have been added.
A pattern-list is one or more patterns separated by |.
The following can now be all or part of a pattern:
1. ?(pattern-list) - allows any pattern to be optional
2. *(pattern-list) - matches zero or more of any pattern
3. +(pattern-list) - matches one or more of any pattern
4. @(pattern-list) - matches one of any pattern. The @
is optional for nested patterns.
5. !(pattern-list) - matches everything, except any of the
patterns.
b. A new compound command beginning with the new reserved
word [[ and ending with the new reserved word ]] has been
added. This compound command is intended to replace both
test and [. The operators && and || replace -a and -o.
Unquoted parenthesis are used for grouping. The words
between [[ and ]] are not expanded for word splitting
and pathname expansion. The operators = and != allow the
right hand side to be a pattern. You can also specify
< and > within [[ ]] to compare two strings. Also the
following test primitives have been added to test, [ and [[:
1. -O file, returns true if file is owned by effective user.
2. -G file, returns true if file is owned by effective group.
3. -S file, returns true if file is of type socket.
4. -a file, returns true if file exists.
5. -o option, returns true if option is on.
6. Extra arguments are no longer result in an error.
This increases compatibility with the Bourne shell.
7. File names of the form /dev/fd/NN can be used to check
the attributes for file descriptor NN.
c. The operators &&, ||, &, |, ^, <<, >> and ~ have been added
the the arithmetic evaluator. You can use them in any
arithmetic expression. Also, all the assignments operators,
+=, etc. are now recognized by ksh. The precedences and
associativity of ksh arithmetic operators are the same as
those of the C programming language.
d. Several options have been added or changed.
1. A noclobber option has been added. With noclobber
set, > file produces an error when file exists.
Use >| file to write to file even if noclobber is set.
2. A nolog option has been added. Nolog disables
the saving of the source for functions in the
history file.
3. bgnice is now turned on by default when interactive.
4. The meaning of the -p option has been changed
as well as its name. In the previous version,
-p caused the path to be reset to a default value
and the shell not to run your personal .profile
and $ENV file. Instead, the shell executed a file
named /etc/suid_exec. The -p option was enabled
automatically whenever the real and effective user
or group id were not equal. This was called the
protective option. With the new release, the -p
no longer resets the path to a default value. In
addition, the effective user id and group id are set
to the real user id and group id unless the shell
has been invoked with the -p options which is now
called privileged. In addition, turning off
privileged, (set +p) sets the effective ids to
their real values. On some systems you the command
set -p will restore the permissions to the way that
they were before the set +p.
e. Six new variables have been added.
ERRNO - set to the value of errno after each system call.
LINENO - set to the line number of current command.
PS4 - evaluates to prompt used with set -x, default '+ '.
FPATH - used to search for function definitions. The FPATH
directories are searched after the PATH variable.
If a file is found, it is dotted into the environment
and then it tries to execute a function of the
given name. The declaration typeset -fu name, causes
name to be searched for in FPATH directories before
searching PATH. A preset alias, autoload='typeset -fu',
has been added.
OPTARG - used with the getopts built-in.
OPTIND - used with the getopts built-in.
f. The following changes and additions have been made to the
editing modes:
1. Searches starting with a ^ now only match at the
beginning of the line in both emacs and vi mode.
2. Searches are performed much faster than with
earlier versions.
3. The | directive has been added to vi
4. The r directive of vi can now be preceded by a count.
5. The new vi directive \ causes the current word to
be extended as far as possible as long as it matches
a unique pathname.
6. Emacs <ESC><ESC> now behaves like vi \ above.
7. Undefined <ESC> sequences in emacs now beep.
8. Emacs keeps prompt on screen when scrolling.
9. Last delete saved across commands in emacs.
10. M-^]c, moves back to character c.
g. A DEBUG trap has been added to aid debugging. This trap
gets executed after each statement. Also, set -x now
displays I/O redirections.
h. You can now assign an array with set -A array_name value...
i. Aliases will now be expanded inside other alias. Thus, if
alias foo=bar bar=bam then foo will expand to bam. However,
an alias will not re-expand within its own expansion so you
can alias ls='ls -C'. If you alias foo=bar bar=foo, then
foo will expand to foo and bar will expand to bar.
j. The commands typeset and alias now allow option arguments
as separate words, rather than all in one word. For example,
typeset -ux and typeset -u -x. Also commands that allow
multiple options, now allow you to specify -- as an
indicator that there are not more options. This is needed
in case the next argument starts with a -.
k. The attributes for exported variables are now passed through
then environment. Thus setting a variable readonly and
exporting it will cause it to be readonly whenever a shell
is invoked. The IFS parameter is reset to the default value
even if you export it, after reading the environment file.
l. If the last element of a pipeline is a built-in, a compound
command or a function, then it is now executed in the current
process environment. If you require the previous semantics
then you must use parenthesis. All the other elements
of a pipeline are carried out in a separate environment and
any changes are not brought back to the parent environment.
This remains a caveat and you should use parenthesis if you
require that they be carried out in a separate environment.
m. The ~ expansion now uses yellow pages on systems that
provide this network service.
n. The expansions for ~, ~+ and ~- have been changed to expand
to $HOME, $PWD and $OLDPWD respectively. Previously, they
returned the value of the home directory, the present working
directory and the previous working directory at the time
they were read. This caused surprising results when used
within scripts or functions.
o. The getopts built-in from System V release 3 has been added.
p. You can now move the file descriptors for a cooperating
process (a job followed by |&), to numbered files by using
exec n<&p for the read descriptor and exec n>&p for the
write descriptor, where n is a digit. Once you move this
descriptor you can close it or redirect any command to or
from it.
q. The built-in commands break, continue, and exit now behave
like special built-ins and have a dagger in front of them
on the man page.
r. Each pattern in a case statement will now allow an optional
open parenthesis. The open parenthesis is required when
a case statement is part of a $() command substitution.
s. The previously unadvertised <> redirection operator, now
works. This operator causes a file to be opened for read
and write. The file is not truncated.
t. The alert character sequence \a has been added as an
escape sequence to the echo and print built-in commands.
The sequence \a will expand to the ASCII Bell character.
u. When ksh reads an unquoted ${, it now reads until the
matching unquoted } as part of the same word. Thus,
you do not need to use quotes to put most blanks and
most other special characters inside ${...}.
v. Code for BSD style job control for System V is now
conditionally compiled with the SIGTSTP signal. These
should work with any POSIX conforming job control
implementation such as System V Release 4. Also, can now
refer to jobs as %?string to match a job that contains
string as part of its name.
w. A trap on CHLD will be executed when a child process
stops or exits. Thus, with monitor mode on, you can set
trap 'jobs -n' CHLD to get the csh, set notify behavior.
x. The -p option has been added to whence to find the pathname
of a given name, even when the name is an alias or function
name.
y. Options -L and -P have been added to pwd and cd on systems
with symbolic links. The default, -L, preserves logical
naming so that .. will move up one component towards the
root. The physical option, -P, uses a physical model for
paths. Thus, if /usr/include/sys > /sys/h, then cd
/usr/include/sys;pwd;pwd -P, will print /usr/include/sys
followed by /sys/h. A cd .. will put you in /usr/include,
whereas a cd -P .. will put you in /sys.
z. $((expression)) expands to the value of the enclosed
arithmetic expression.
aa. The argument to umask can also be a symbolic string in
the format of a chmod permission string.
3. Bugs fixed since 06/03/86
a. typeset -LZ2 x, followed by integer x, created a base 2
integer variable x. This now correctly makes x base 10.
b. Single quoted strings with adjacent characters $( sometimes
did not work correctly. This has been fixed.
c. The suid_exec program now works correctly for setuid scripts.
The fix in the 06/03/86a release solved the security problem
but caused setuid scripts with read permission to fail.
d. A bug in the MULTIBYTE version which could cause core dumps
on variable assignments has been fixed.
e. The following parameter expansion bugs have been fixed:
1. Expansions of the form ${x-'${...}'} incorrectly
evaluated to ${x}} when x was set.
2. Expansions of the form ${x+$} and ${x+$\}} displayed
the message 'bad substitution' when x is not set.
3. The expansion "${x:=a b}" now expands to a single
argument when x is not defined. It previously
expanded to two arguments.
f. Non-builtin command incorrectly had backslashes removed
from the command before execution. Thus '\date' would execute
the date command. This has been fixed.
g. On some versions of Unix the shell did not die when sent
a hangup signal while in an editing mode. This has been
fixed.
h. Some fixes have been made to the the emacs edit directives.
1. M-< now works as documented.
2. ^N now works correctly after ^P reaches the oldest
command from the history file.
3. ^W now works no matter what your backspace character.
4. Scrolling now works correctly when you prompt is longer
than half the width of your screen.
5. Pathname completion no longer causes a core dump on
system that don't allow references to 0 when you expand
a word that expands to a null string, i.e. $foo.
6. M- before a newline or return no longer has an effect.
i. Some fixes have been made to the the vi edit directives.
1. Lines of one character in length now work.
2. The . directive now works correctly after the R directive.
3. The ~ directive now works correctly when preceded by a count.
4. The directives c0, d0, cb and db now work.
5. You can now use ESC to cancel r, f and @ directives.
6. On System V, if you have ignoreeof set, and you enter
EOF, you no longer receive 'use exit to logout' messages
when you subsequently hit ESC.
7. Tabs now get expanded to correct columns when ksh
redraws the line.
8. The e and E directives now ring bell when there are
no characters on the line.
j. Syntax errors in the ENV file now correctly list the name
of the ENV file as part of the message.
k. The let command when invoked as ((expr)) was fixed to work
correctly when expr contained $() or ``. Also subscripts
in variable assignments now work correctly when they contain
$() and/or ``.
l. The if..then..elif..fi now correctly handles redirection.
Previously redirection applied only to the elif portion.
m. A script containing lines like exec 3<file;read line <&3
read line <&3 didn't work correctly because of buffering
problems. This has been fixed.
n. On machines that do not allow referencing address 0, a
null command substitution `` or $() cased a core dump.
This has been fixed.
o. If you declared an integer variable and gave it a null string
as an assignment, then the value was randomly set. It is now
set to zero, i. e., integer x;x=.
p. If you have and alias to a single word command, and you use
the r predefined alias to reexecute it, you will no longer
get an extra newline displayed. An alias ending in space
no longer has an extra space displayed.
q. An alias of the form x='foo > file' incorrectly attempted alias
substitution on the first argument of x. This has been fixed.
Also, aliases and commands of the form, > foo x=bar command
are now correctly handled.
r. The parameter $! now gets set for cooperating processes.
s. Under some circumstances a write to an co-process did not
flush so that a subsequent read caused the process to hang.
This has been fixed.
t. When you invoke a shell procedure containing a here document
from within a command substitution contained in double
quotes, ( "`shell_prog`"), parameter substitutions inside
the here document no longer insert extra \'s.
u. A bug in line continuation caused lines ending in \x\ not to
be continued properly has been fixed.
v. The whence built-in command returned the wrong value when you
specified a full pathname and there was a tracked alias with
the same simple name. This has been fixed. Also whence no
always returns an absolute pathname for programs.
w. You can now specify typeset -fx before a function is defined
to set the x attribute. Before, defining a function cleared
the x and t attributes.
x. A trap on EXIT from within a function no longer affects the
return value of a function.
y. set -e and trap on ERR didn't get triggered in some cases where
it should have. This has been fixed.
z. A bug that caused the shell to hang when the shell timed out
and you had a trap on EXIT that did a command substitution has
been fixed.
aa. On some systems kill -l could cause a core dump. This has
been fixed.
bb. The ignoreeof option only applies when reading from a tty.
This prevents ksh from looping when running sh -i when reading
from a pipe or a file.
cc. case patterns of the form identifier[ are now processed
correctly.
dd. On some 16-bit machines $$ and $RANDOM were not getting set
correctly. This has been fixed.
ee. A space or tab at the end of a command is now placed in the
history file when preceded by a \ at the end of a command.
ff. ksh can now handle a signal that ksh does not know about.
This can happen when a signal ha been added after ksh was
compiled. It will print the signal number. On previous
versions the results were undefined and could even cause
core dumps.
gg. In instances where there are unbalanced quotes and ksh
allows unbalanced quotes, the results are now the same
as bsh. In some cases the last character was lost. For
example, x=`:|echo 'abc/` no longer removed the /.
hh. sh -n no longer loops indefinitely when you have
while looks in your script. Also, -n will make more
extensive syntax checks than earlier versions.
ii. A bug in read that caused the last field not to get
set to null when there were trailing delimiters has
been fixed.
jj. break 0 no longer puts you in a noexecute mode when entered
interactively.
kk. ksh no longer dumps core when expanding some long
substring patterns.
ll. A bug that caused exec not to find a program when
a PATH contained relative directory that contained it
has been fixed.
mm. Setting IFS to a null string, now correctly keeps ksh
from splitting up arguments after parameter and command
substitution.
nn. Unsetting PS1 no longer causes the shell to core dump
on systems that cannot access address 0.
oo. If a child process terminates with O_NDELAY (or FNDELAY
or O_NONBLOCK) set on the terminal, this no longer causes
the shell to exit.
pp. If you refer to a job using a prefix which is ambiguous,
a message is displayed. Previously, the prefix matched
the most recent job starting with this prefix.
qq. ksh now produces syntax errors when the last element
of a pipeline is omitted, for example a | &.
rr. Here-documents containing expansions of the form ${x-y},
or other operators, now work correctly when y contains
double quotes and/or backslashs. Double quotes are
not treated specially inside a here-document and a \
is only special when followed by a $, `, and \. This
was a bug in the Bourne shell also.
ss. The read built-in now treats \ as an escape character
when reading input if you do not specify -r. This is
the same as with the Bourne shell.
tt. sh -t now works that same as with the Bourne shell.
uu. "${x[*]}" now always expands to a single argument.
vv. If you do not specify a size with typeset -R, -L,
or -Z, the size gets defined on the first assignment.
ww. When set -k is on, words in a for list of the form
name=value are no longer discarded.
xx. A dot script that dots itself recursively, no longer
produces a core dump. It now prints an error message.
yy. ksh script requires execute permission for script
when using PATH to find script.
zz. The exit status of all commands is now limited to
between 0 and 255. Previously, builtin commands
could have other return values.
aaa. If the ENV file contained functions that used here
documents, then "sh -c prog" no longer leaves temporary
files around.
bbb. (trap 'echo foobar' 0; date) now executes the exit
trap. With Bourne shell and earlier ksh it didn't.
ccc. The shell no longer aborts when the history file grows
larger than ulimit.
ddd. An expansion of the form ${name%/\*} no removes only
a trailing /*. Previously in removed / followed by
anything.
4. The source code has undergone significant modification.
a. The SXT conditional compilation has been removed and all
the code in the jsh directory has been stripped out.
b. Most configuration parameters now get generated rather
than relying on testing which system you are on. This
should make it easier to port to hybrid systems. Other
options are now set in the OPTIONS file.
c. The are several new compile time options. See the README
file for details.
d. There is no more standard makefiles with this distribution.
The build procedure is written in native V7 Bourne shell.
There is also a 4th. generation make (nmake) Makefile
for those lucky enough to have this tool.
e. There are far fewer global names. This should make it
must easier to add built-in commands without worrying
about conflicts.
f. The code no longer uses standard I/O. This should make
it easier to port.
g. There are ANSI C prototypes for most of the external routines
h. Several minor performance enhancements should make startup
faster and should make some scripts run faster.
5. Incompatibilities with 06/03/86 version.
a. name=value ... is now evaluated left to right in accordance
with POSIX.
b. Aliases and functions defined in the $ENV file without -x
are removed before running a script.