commit bash-20091022 snapshot

This commit is contained in:
Chet Ramey
2011-12-08 20:18:59 -05:00
parent e1e48bbabe
commit b06e584e05
17 changed files with 202 additions and 21 deletions
+3
View File
@@ -323,3 +323,6 @@ bash-2.0 were significant.)
search the current directory for its filename argument, even if "." is
not in $PATH. Posix says that the shell shouldn't look in $PWD in this
case.
44. Bash-4.1 uses the current locale when comparing strings using the < and
> operators to the `[[' command.
+24
View File
@@ -9071,3 +9071,27 @@ builtins/evalstring.c
indicating a parse error, print a warning message if the conditions
would require a posix-mode shell to abort (parse error in a `.'
script or eval string)
10/19
-----
builtins/evalfile.c
- even if the `check binary' flag is not passed to _evalfile, return an
error after reading 128 null characters if called by `source', on
the assumption that it's probably a binary file. [This will be in
bash-4.1-beta]
10/24
-----
[bash-4.1-alpha released]
bashline.c
- don't call command_substitution_completion_function if we're
completing a substring delimited by a single quote. Fixes bug
reported by bash-bugs@atu.cjb.net
lib/readline/complete.c
- make sure _rl_skip_completed_text defaults to 0, as the
documentation states (incorrect in bash-4.1-alpha)
- in insert_match, skip over a close quote in the replacement text if
the character at point when completion is invoked is a single
quote. Fixes complaint from bash-bugs@atu.cjb.net
+26 -2
View File
@@ -9049,8 +9049,8 @@ parse.y
execute_cmd.c
- in execute_in_subshell, make sure we set setjmp(return_catch) before
running the command, in case the command or its word expansion
calls jump_to_top_level. Fixes bug reported by Enrique Perez-Terron
<enrio@online.no>
calls jump_to_top_level. Fixes bug reported by Nils Bernhard
<nils.bernhard@yahoo.de>
subst.c
- new PF_NOSPLIT2 flag for param_expand
@@ -9071,3 +9071,27 @@ builtins/evalstring.c
indicating a parse error, print a warning message if the conditions
would require a posix-mode shell to abort (parse error in a `.'
script or eval string)
10/19
-----
builtins/evalfile.c
- even if the `check binary' flag is not passed to _evalfile, return an
error after reading 128 null characters if called by `source', on
the assumption that it's probably a binary file. [This will be in
bash-4.1-beta]
10/24
-----
[bash-4.1-alpha released]
bashline.c
- don't call command_substitution_completion_function if we're
completing a substring delimited by a single quote. Fixes bug
reported by bash-bugs@atu.cjb.net
lib/readline/complete.c
- make sure _rl_skip_completed_text defaults to 0, as the
documentation states (incorrect in bash-4.1-alpha)
- in insert_match, skip over a close quote in the replacement text if
the character at point when completion is invoked is a single
quote
+2
View File
@@ -488,6 +488,8 @@ po/fi.gmo f
po/fi.po f
po/fr.gmo f
po/fr.po f
po/ga.gmo f
po/ga.po f
po/hu.gmo f
po/hu.po f
po/id.gmo f
+1
View File
@@ -833,6 +833,7 @@ tests/exp.tests f
tests/exp.right f
tests/exp1.sub f
tests/exp2.sub f
tests/exp3.sub f
tests/extglob.tests f
tests/extglob.right f
tests/extglob1.sub f
+111
View File
@@ -1,3 +1,114 @@
This is a terse description of the new features added to bash-4.1 since
the release of bash-4.0. As always, the manual page (doc/bash.1) is
the place to look for complete descriptions.
1. New Features in Bash
a. Here-documents within $(...) command substitutions may once more be
delimited by the closing right paren, instead of requiring a newline.
b. Bash's file status checks (executable, readable, etc.) now take file
system ACLs into account on file systems that support them.
c. Bash now passes environment variables with names that are not valid
shell variable names through into the environment passed to child
processes.
d. The `execute-unix-command' readline function now attempts to clear and
reuse the current line rather than move to a new one after the command
executes.
e. `printf -v' can now assign values to array indices.
f. New `complete -E' and `compopt -E' options that work on the "empty"
completion: completion attempted on an empty command line.
g. New complete/compgen/compopt -D option to define a `default' completion:
a completion to be invoked on command for which no completion has been
defined. If this function returns 124, programmable completion is
attempted again, allowing a user to dynamically build a set of completions
as completion is attempted by having the default completion function
install individual completion functions each time it is invoked.
h. When displaying associative arrays, subscripts are now quoted.
i. Changes to dabbrev-expand to make it more `emacs-like': no space appended
after matches, completions are not sorted, and most recent history entries
are presented first.
j. The [[ and (( commands are now subject to the setting of `set -e' and the
ERR trap.
k. The source/. builtin now removes NUL bytes from the file before attempting
to parse commands.
l. There is a new configuration option (in config-top.h) that forces bash to
forward all history entries to syslog.
m. A new variable $BASHOPTS to export shell options settable using `shopt' to
child processes.
n. There is a new confgure option that forces the extglob option to be
enabled by default.
o. New variable $BASH_XTRACEFD; when set to an integer bash will write xtrace
output to that file descriptor.
p. If the optional left-hand-side of a redirection is of the form {var}, the
shell assigns the file descriptor used to $var or uses $var as the file
descriptor to move or close, depending on the redirection operator.
q. The < and > operators to the [[ conditional command now do string
comparison according to the current locale.
r. Programmable completion now uses the completion for `b' instead of `a'
when completion is attempted on a line like: a $(b c.
s. Force extglob on temporarily when parsing the pattern argument to
the == and != operators to the [[ command, for compatibility.
t. Changed the behavior of interrupting the wait builtin when a SIGCHLD is
received and a trap on SIGCHLD is set to be Posix-mode only.
u. The read builtin has a new `-N nchars' option, which reads exactly NCHARS
characters, ignoring delimiters like newline.
2. New Features in Readline
a. New bindable function: menu-complete-backward.
b. In the vi insertion keymap, C-n is now bound to menu-complete by default,
and C-p to menu-complete-backward.
c. When in vi command mode, repeatedly hitting ESC now does nothing, even
when ESC introduces a bound key sequence. This is closer to how
historical vi behaves.
d. New bindable function: skip-csi-sequence. Can be used as a default to
consume key sequences generated by keys like Home and End without having
to bind all keys.
e. New application-settable function: rl_filename_rewrite_hook. Can be used
to rewite or modify filenames read from the file system before they are
compared to the word to be completed.
f. New bindable variable: skip-completed-text, active when completing in the
middle of a word. If enabled, it means that characters in the completion
that match characters in the remainder of the word are "skipped" rather
than inserted into the line.
g. The pre-readline-6.0 version of menu completion is available as
"old-menu-complete" for users who do not like the readline-6.0 version.
h. New bindable variable: echo-control-characters. If enabled, and the
tty ECHOCTL bit is set, controls the echoing of characters corresponding
to keyboard-generated signals.
i. New bindable variable: enable-meta-key. Controls whether or not readline
sends the smm/rmm sequences if the terminal indicates it has a meta key
that enables eight-bit characters.
-------------------------------------------------------------------------------
This is a terse description of the new features added to bash-4.0 since
the release of bash-3.2. As always, the manual page (doc/bash.1) is
the place to look for complete descriptions.
+1 -1
View File
@@ -1,7 +1,7 @@
Introduction
============
This is GNU Bash, version 4.0. Bash is the GNU Project's Bourne
This is GNU Bash, version 4.1. Bash is the GNU Project's Bourne
Again SHell, a complete implementation of the POSIX.2 shell spec,
but also with interactive command line editing, job control on
architectures that support it, csh-like features such as history
+3 -2
View File
@@ -1315,8 +1315,9 @@ attempt_shell_completion (text, start, end)
/* Special handling for command substitution. If *TEXT is a backquote,
it can be the start or end of an old-style command substitution, or
unmatched. If it's unmatched, both calls to unclosed_pair will
succeed. */
if (*text == '`' &&
succeed. Don't bother if readline found a single quote and we are
completing on the substring. */
if (*text == '`' && rl_completion_quote_character != '\'' &&
(in_command_position || (unclosed_pair (rl_line_buffer, start, "`") &&
unclosed_pair (rl_line_buffer, end, "`"))))
matches = rl_completion_matches (text, command_subst_completion_function);
+1 -1
View File
@@ -1197,7 +1197,7 @@ find_cmd_start (start)
register int s, os;
os = 0;
while (((s = skip_to_delim (rl_line_buffer, os, COMMAND_SEPARATORS, SD_NOJMP)) <= start) &&
while (((s = skip_to_delim (rl_line_buffer, os, COMMAND_SEPARATORS, SD_NOJMP|SD_NOSKIPCMD)) <= start) &&
rl_line_buffer[s])
os = s+1;
return os;
+11 -2
View File
@@ -81,7 +81,7 @@ _evalfile (filename, flags)
{
volatile int old_interactive;
procenv_t old_return_catch;
int return_val, fd, result, pflags, i;
int return_val, fd, result, pflags, i, nnull;
ssize_t nr; /* return value from read(2) */
char *string;
struct stat finfo;
@@ -189,11 +189,20 @@ file_error_and_exit:
i = strlen (string);
if (i < nr)
{
for (i = 0; i < nr; i++)
for (nnull = i = 0; i < nr; i++)
if (string[i] == '\0')
{
memmove (string+i, string+i+1, nr - i);
nr--;
/* Even if the `check binary' flag is not set, we want to avoid
sourcing files with more than 256 null characters -- that
probably indicates a binary file. */
if ((flags & FEVAL_BUILTIN) && ++nnull > 256)
{
free (string);
(*errfunc) (_("%s: cannot execute binary file"), filename);
return ((flags & FEVAL_BUILTIN) ? EX_BINARY_FILE : -1);
}
}
}
+6 -2
View File
@@ -183,7 +183,7 @@ int rl_visible_stats = 0;
characters from the match that match characters following point in
the word. This means, for instance, completing when the cursor is
after the `e' in `Makefile' won't result in `Makefilefile'. */
int _rl_skip_completed_text = 1;
int _rl_skip_completed_text = 0;
/* If non-zero, then this is the address of a function to call when
completing on a directory name. The function is called with
@@ -1570,7 +1570,7 @@ insert_match (match, start, mtype, qc)
{
char *replacement, *r;
char oqc;
int end;
int end, rlen;
oqc = qc ? *qc : '\0';
replacement = make_quoted_replacement (match, mtype, qc);
@@ -1578,6 +1578,7 @@ insert_match (match, start, mtype, qc)
/* Now insert the match. */
if (replacement)
{
rlen = strlen (replacement);
/* Don't double an opening quote character. */
if (qc && *qc && start && rl_line_buffer[start - 1] == *qc &&
replacement[0] == *qc)
@@ -1588,6 +1589,9 @@ insert_match (match, start, mtype, qc)
replacement[0] != oqc)
start--;
end = rl_point - 1;
/* Don't double a closing quote character */
if (qc && *qc && end && rl_line_buffer[rl_point] == *qc && replacement[rlen - 1] == *qc)
end++;
if (_rl_skip_completed_text)
{
r = replacement;
+5 -5
View File
@@ -183,7 +183,7 @@ int rl_visible_stats = 0;
characters from the match that match characters following point in
the word. This means, for instance, completing when the cursor is
after the `e' in `Makefile' won't result in `Makefilefile'. */
int _rl_skip_completed_text = 1;
int _rl_skip_completed_text = 0;
/* If non-zero, then this is the address of a function to call when
completing on a directory name. The function is called with
@@ -1570,7 +1570,7 @@ insert_match (match, start, mtype, qc)
{
char *replacement, *r;
char oqc;
int end, ostart;
int end;
oqc = qc ? *qc : '\0';
replacement = make_quoted_replacement (match, mtype, qc);
@@ -2226,12 +2226,12 @@ rl_filename_completion_function (text, state)
}
/* An initial implementation of a menu completion function a la tcsh. The
first time (if the last readline command was not rl_menu_complete), we
first time (if the last readline command was not rl_old_menu_complete), we
generate the list of matches. This code is very similar to the code in
rl_complete_internal -- there should be a way to combine the two. Then,
for each item in the list of matches, we insert the match in an undoable
fashion, with the appropriate character appended (this happens on the
second and subsequent consecutive calls to rl_menu_complete). When we
second and subsequent consecutive calls to rl_old_menu_complete). When we
hit the end of the match list, we restore the original unmatched text,
ring the bell, and reset the counter to zero. */
int
@@ -2251,7 +2251,7 @@ rl_old_menu_complete (count, invoking_key)
/* The first time through, we generate the list of matches and set things
up to insert them. */
if (rl_last_func != rl_menu_complete)
if (rl_last_func != rl_old_menu_complete)
{
/* Clean up from previous call, if any. */
FREE (orig_text);
-1
View File
@@ -185,7 +185,6 @@ char *
fnx_tofs (string)
char *string;
{
bar
return string;
}
+1 -1
View File
@@ -1,4 +1,4 @@
BUILD_DIR=/usr/local/build/bash/bash-current
BUILD_DIR=/usr/local/build/chet/bash/bash-current
THIS_SH=$BUILD_DIR/bash
PATH=$PATH:$BUILD_DIR
+4 -4
View File
@@ -16,17 +16,17 @@ after exec1.sub without args: 0
126
./execscript: line 46: .: /: is a directory
1
127
126
0
this is bashenv
./exec3.sub: line 3: /tmp/bash-notthere: No such file or directory
./exec3.sub: line 3: exec: /tmp/bash-notthere: cannot execute: No such file or directory
126
./execscript: line 68: notthere: No such file or directory
./execscript: line 70: notthere: No such file or directory
127
./execscript: line 71: notthere: No such file or directory
./execscript: line 73: notthere: No such file or directory
127
./execscript: line 74: notthere: No such file or directory
./execscript: line 76: notthere: No such file or directory
127
this is sh
this is sh
+2
View File
@@ -48,6 +48,8 @@ echo $?
# try sourcing a binary file -- post-2.04 versions don't do the binary file
# check, and will probably fail with `command not found', or status 127
# bash-4.1 and later check for 256 NUL characters and fail as binary files
# if there are more than that, it's probably binary
. ${THIS_SH} 2>/dev/null
echo $?
+1
View File
@@ -1,3 +1,4 @@
cd ${TMPDIR:=/var/tmp}
rm -f u
${THIS_SH} -c 'exec 10>&1; echo fd 10 >&10' 10>u