From ec69166705582b11cf9469c950591887eb97efce Mon Sep 17 00:00:00 2001 From: Chet Ramey Date: Mon, 8 Aug 2016 15:57:30 -0400 Subject: [PATCH] commit bash-20160805 snapshot --- CHANGES | 47 ++++++++++++ CHANGES-4.4 | 173 +++++++++++++++++++++++++++++++++++++++++++++ CWRU/CWRU.chlog | 56 ++++++++++++++- NEWS-4.4 | 11 +++ bashline.c | 13 +++- command.h | 4 +- configure | 20 +++--- configure.ac | 2 +- execute_cmd.c | 3 +- nojobs.c | 13 +++- subst.c | 29 ++++++-- subst.h | 1 + tests/RUN-ONE-TEST | 2 +- 13 files changed, 347 insertions(+), 27 deletions(-) diff --git a/CHANGES b/CHANGES index b27a753d..94e26da6 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,50 @@ +This document details the changes between this version, bash-4.4-rc2, and +the previous version, bash-4.4-beta2. + +1. Changes to Bash + +a. Fixed an out-of-bounds read in the redirection operator completion code. + +b. Fixed execution context so `until continue' doesn't disable execution for + subsequent commands. + +c. Fixed trap handling code so traps don't inherit a command's temporary + environment. + +d. Fixed a bug that resulted in incorrect line numbers when a function is defined + as part of another function's execution. + +e. Fixed a bug in the expansion of ${a[@]} in contexts where word splitting is not + performed and $IFS is not the default. + +f. Fixed a bug that caused ''"$@" to not expand to an empty argument when there are + no positional parameters. + +g. Fixed a bug that caused a shell compiled without job control to use the incorrect + exit status for builtin commands preceded by a command executed from the file + system that causes the shell to call waitpid(). + +2. Changes to Readline + +a. Fixed a bug that caused mode strings to be displayed incorrectly if the prompt was + shorter than the mode string. + +3. New Features in Bash + +a. Using ${a[@]} or ${a[*]} with an array without any assigned elements when + the nounset option is enabled no longer throws an unbound variable error. + +4. New Features in Readline + +a. New application-callable function: rl_pending_signal(): returns the signal + number of any signal readline has caught but not yet handled. + +b. New application-settable variable: rl_persistent_signal_handlers: if set to a + non-zero value, readline will enable the readline-6.2 signal handler behavior + in callback mode: handlers are installed when rl_callback_handler_install is + called and removed removed when a complete line has been read. + +------------------------------------------------------------------------------ This document details the changes between this version, bash-4.4-beta2, and the previous version, bash-4.4-rc1. diff --git a/CHANGES-4.4 b/CHANGES-4.4 index 71ef959c..ac163451 100644 --- a/CHANGES-4.4 +++ b/CHANGES-4.4 @@ -1,3 +1,176 @@ +This document details the changes between this version, bash-4.4-rc2, and +the previous version, bash-4.4-beta2. + +1. Changes to Bash + +a. Fixed an out-of-bounds read in the redirection operator completion code. + +b. Fixed execution context so `until continue' doesn't disable execution for + subsequent commands. + +c. Fixed trap handling code so traps don't inherit a command's temporary + environment. + +d. Fixed a bug that resulted in incorrect line numbers when a function is defined + as part of another function's execution. + +e. Fixed a bug in the expansion of ${a[@]} in contexts where word splitting is not + performed and $IFS is not the default. + +f. Fixed a bug that caused ''"$@" to not expand to an empty argument when there are + no positional parameters. + +g. Fixed a bug that caused a shell compiled without job control to use the incorrect + exit status for builtin commands preceded by a command executed from the file + system that causes the shell to call waitpid(). + +2. Changes to Readline + +a. Fixed a bug that caused mode strings to be displayed incorrectly if the prompt was + shorter than the mode string. + +3. New Features in Bash + +a. Using ${a[@]} or ${a[*]} with an array without any assigned elements when + the nounset option is enabled no longer throws an unbound variable error. + +4. New Features in Readline + +a. New application-callable function: rl_pending_signal(): returns the signal + number of any signal readline has caught but not yet handled. + +b. New application-settable variable: rl_persistent_signal_handlers: if set to a + non-zero value, readline will enable the readline-6.2 signal handler behavior + in callback mode: handlers are installed when rl_callback_handler_install is + called and removed removed when a complete line has been read. + +------------------------------------------------------------------------------ +This document details the changes between this version, bash-4.4-beta2, and +the previous version, bash-4.4-rc1. + +1. Changes to Bash + +a. Fixed a memory leak when processing ${!var[@]}. + +b. Fixed a bug that caused subshells to free trap strings associated with + inherited signals. + +c. Inheriting BASHOPTS from the environment now works to force actions + associated with enabling an option, instead of just marking the option + as enabled. + +d. Fixed a bug that allowed assignments to BASH_CMDS when the shell was in + restricted mode. + +e. Fixed a bug caused by an accidental omission of part of the original patch + for EXECIGNORE. + +e. Prompt expansion now quotes the results of the \s, \h, and \H expansions. + +f. Fixed a bug that caused parsing errors in command substitutions with + consecutive case statements separated by newlines. + +g. Updated logic used to decide whether bash is running inside an emacs + terminal emulator to work with future emacs versions. + +h. Fixed two extended pattern matching bugs caused by premature short- + circuiting. + +i. Fixed a memory leak in the code that removes duplicate history entries. + +j. There are a number of bug fixes to coproc, mapfile, declare, unset, + and assignment statements that prevent nameref variables from creating + and unsetting variables with invalid names. + +k. Fixed a bug that caused variables to be inadvertently marked as both an + associative and an indexed array. + +l. Fixed a bug that caused `bash -c' to not run a trap specified in the + command string. + +j. There are a number of bug fixes to coproc, mapfile, declare, and assignment + statements that prevent nameref variables from overwriting or modifying + attributes of readonly variables. + +k. Fixed a bug that caused command substitution to attempt to set the + terminal's process group incorrectly. + +l. Fixed a bug that could cause prompt string expansion to display error + messages when the `nounset' shell option is set. + +m. Fixed a bug that caused "$@" to not expand to an empty string under the + circumstances when Posix says it should ("${@-${@-$@}}"). + +n. Fixed several bugs caused by referencing nameref variables whose values + are names of unset variables (or names that are valid for referencing + but not assignment), including creating variables in the temporary + environment. + +o. Function tracing and error tracing are disabled if --debugger is supplied + at startup but the shell can't find the debugger start file. + +p. Fixed a bug when IFS is used as the control variable in a for statement. + +q. Fixed a bug with SIGINT received by a command substitution in an interactive + shell. + +r. The checks for nameref variable self-references are more thorough. + +s. Fixed several bugs with multi-line aliases. + +t. Fixed `test' to handle the four-argument case where $1 == '(' and + $4 == ')'. + +u. Fixed a bug in the expansion of $* in the cases where word splitting is + not performed. + +v. Fixed a bug in execution of case statements where IFS includes the + pattern matching characters. + +2. Changes to Readline + +a. When refreshing the line as the result of a key sequence, Readline attempts + to redraw only the last line of a multiline prompt. + +b. Fixed an issue that caused completion of git commands to display + incorrectly when using colored-completion-prefix. + +c. Fixed several redisplay bugs having to do with multibyte characters and + invisible characters in prompt strings. + +3. New Features in Bash + +a. Value conversions (arithmetic expansions, case modification, etc.) now + happen when assigning elements of an array using compound assignment. + +b. There is a new option settable in config-top.h that makes multiple + directory arguments to `cd' a fatal error. + +c. Bash now uses mktemp() when creating internal temporary files; it produces + a warning at build time on many Linux systems. + +4. New Features in Readline + +a. The default binding for ^W in vi mode now uses word boundaries specified + by Posix (vi-unix-word-rubout is bindable command name). + +b. rl_clear_visible_line: new application-callable function; clears all + screen lines occupied by the current visible readline line. + +c. rl_tty_set_echoing: application-callable function that controls whether + or not readline thinks it is echoing terminal output. + +d. Handle >| and strings of digits preceding and following redirection + specifications as single tokens when tokenizing the line for history + expansion. + +e. Fixed a bug with displaying completions when the prefix display length + is greater than the length of the completions to be displayed. + +f. The :p history modifier now applies to the entire line, so any expansion + specifying :p causes the line to be printed instead of expanded. + +------------------------------------------------------------------------------ This document details the changes between this version, bash-4.4-rc1, and the previous version, bash-4.4-beta. diff --git a/CWRU/CWRU.chlog b/CWRU/CWRU.chlog index 6d9871ff..36336794 100644 --- a/CWRU/CWRU.chlog +++ b/CWRU/CWRU.chlog @@ -10342,7 +10342,7 @@ lib/readline/bind.c 1/11 ---- -execute_cmd.c +subst.c - process_substitute: when compiled without job control (JOB_CONTROL not defined), make sure we call stop_making_children like we do in the job control code branch, so already_making_children is reset to 0. This @@ -11469,3 +11469,57 @@ lib/readline/display.c use prompt_last_invisible directly. Fixes mode string redisplay issue with short prompt strings reported by Steve Jones + 8/4 + --- +nojobs.c + - without_job_control: new function, resets child state that's eventually + used to decide whether or not to wait_for children + +execute_cmd.c + - initialize_subshell: call without_job_control in both the JOB_CONTROL and + no job control paths so we can reset the state in subshells that will not + cause them to wait_for children inappropriately. Fixes bug reported by + Dan Cross + + 8/5 + --- +configure.ac + - release version is now `rc2' + +bashline.c + - command_word_completion_function: if direxpand is set, make sure to + run hint_text through bash_directory_completion_hook, since + readline will do that and we want to be able to match the results + readline returns. Fixes bug reported by Pat Somaru + + +command.h + - W_COMPLETE: new flag word value + - PF_COMPLETE: new flags value for param_expand + +subst.h + - SX_STRIPDQ: new flag, used for string_extract_double_quoted + +bashline.c + - bash_filename_stat_hook,bash_directory_completion_hook: pass W_COMPLETE + flag to expand_prompt_string + +subst.c + - expand_word_internal: if W_COMPLETE in word->flags, pass PF_COMPLETE + to param_expand + - param_expand: if PF_COMPLETE in pflags, pass SX_COMPLETE to + extract_command_subst. This allows `"$(echo ~/' to perform + completion successfully + - string_extract_double_quoted: turn third argument into a flags arg, + old STRIPDQ is now set if flags&SX_STRIPDQ + - string_extract_double_quoted: changed callers, if third argument was + 1, pass SX_STRIPDQ instead + - expand_word_internal: if W_COMPLETE in word->flags, pass SX_COMPLETE + in flags to string_extract_double_quoted for case '"' + - string_extract_double_quoted: if SX_COMPLETE in flags, pass it to + extract_command_subst + - expand_word_internal: if W_COMPLETE in word->flags, make sure W_COMPLETE + is in temp word passed to recursive call to expand_word_internal to + expand double-quoted string. Fixes bug reported by John Passaro + + diff --git a/NEWS-4.4 b/NEWS-4.4 index 1ee2af65..f0f95900 100644 --- a/NEWS-4.4 +++ b/NEWS-4.4 @@ -137,6 +137,9 @@ nn. Shells running as root no longer inherit PS4 from the environment, closing a oo. If executing an implicit `cd' when the `autocd' option is set, bash will now invoke a function named `cd' if one exists before executing the `cd' builtin. +pp. Using ${a[@]} or ${a[*]} with an array without any assigned elements when + the nounset option is enabled no longer throws an unbound variable error. + 2. New Features in Readline a. The history truncation code now uses the same error recovery mechansim as @@ -181,3 +184,11 @@ k. If readline reads a history file that begins with `#' (or the value of l. Readline now throws an error if it parses a key binding without a terminating `:' or whitespace. + +m. New application-callable function: rl_pending_signal(): returns the signal + number of any signal readline has caught but not yet handled. + +n. New application-settable variable: rl_persistent_signal_handlers: if set to a + non-zero value, readline will enable the readline-6.2 signal handler behavior + in callback mode: handlers are installed when rl_callback_handler_install is + called and removed removed when a complete line has been read. diff --git a/bashline.c b/bashline.c index a8b403cd..f4fe9f1b 100644 --- a/bashline.c +++ b/bashline.c @@ -1845,7 +1845,9 @@ command_word_completion_function (hint_text, state) if (globpat || absolute_program (hint_text)) { /* Perform tilde expansion on what's passed, so we don't end up - passing filenames with tildes directly to stat(). */ + passing filenames with tildes directly to stat(). The rest of + the shell doesn't do variable expansion on the word following + the tilde, so we don't do it here even if direxpand is set. */ if (*hint_text == '~') { hint = bash_tilde_expand (hint_text, 0); @@ -1859,6 +1861,11 @@ command_word_completion_function (hint_text, state) directory_part = (char *)NULL; } } + else if (dircomplete_expand) + { + hint = savestring (hint_text); + bash_directory_completion_hook (&hint); + } else hint = savestring (hint_text); @@ -3148,7 +3155,7 @@ bash_filename_stat_hook (dirname) have to worry about restoring this setting. */ global_nounset = unbound_vars_is_error; unbound_vars_is_error = 0; - wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB); /* does the right thing */ + wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */ unbound_vars_is_error = global_nounset; if (wl) { @@ -3243,7 +3250,7 @@ bash_directory_completion_hook (dirname) if (should_expand_dirname) { new_dirname = savestring (local_dirname); - wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB); /* does the right thing */ + wl = expand_prompt_string (new_dirname, 0, W_NOCOMSUB|W_COMPLETE); /* does the right thing */ if (wl) { *dirname = string_list (wl); diff --git a/command.h b/command.h index eef5684f..3da5b77d 100644 --- a/command.h +++ b/command.h @@ -1,7 +1,7 @@ /* command.h -- The structures used internally to represent commands, and the extern declarations of the functions used to create them. */ -/* Copyright (C) 1993-2010 Free Software Foundation, Inc. +/* Copyright (C) 1993-2016 Free Software Foundation, Inc. This file is part of GNU Bash, the Bourne Again SHell. @@ -100,6 +100,7 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select, #define W_ARRAYIND 0x1000000 /* word is an array index being expanded */ #define W_ASSNGLOBAL 0x2000000 /* word is a global assignment to declare (declare/typeset -g) */ #define W_NOBRACE 0x4000000 /* Don't perform brace expansion */ +#define W_COMPLETE 0x8000000 /* word is being expanded for completion */ /* Flags for the `pflags' argument to param_expand() and various parameter_brace_expand_xxx functions; also used for string_list_dollar_at */ @@ -107,6 +108,7 @@ enum command_type { cm_for, cm_case, cm_while, cm_if, cm_simple, cm_select, #define PF_IGNUNBOUND 0x02 /* ignore unbound vars even if -u set */ #define PF_NOSPLIT2 0x04 /* same as W_NOSPLIT2 */ #define PF_ASSIGNRHS 0x08 /* same as W_ASSIGNRHS */ +#define PF_COMPLETE 0x10 /* same as W_COMPLETE, sets SX_COMPLETE */ /* Possible values for subshell_environment */ #define SUBSHELL_ASYNC 0x01 /* subshell caused by `command &' */ diff --git a/configure b/configure index b4d51498..3fed91ef 100755 --- a/configure +++ b/configure @@ -1,7 +1,7 @@ #! /bin/sh # From configure.ac for Bash 4.4, version 4.080. # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.69 for bash 4.4-beta2. +# Generated by GNU Autoconf 2.69 for bash 4.4-rc2. # # Report bugs to . # @@ -581,8 +581,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='bash' PACKAGE_TARNAME='bash' -PACKAGE_VERSION='4.4-beta2' -PACKAGE_STRING='bash 4.4-beta2' +PACKAGE_VERSION='4.4-rc2' +PACKAGE_STRING='bash 4.4-rc2' PACKAGE_BUGREPORT='bug-bash@gnu.org' PACKAGE_URL='' @@ -1393,7 +1393,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures bash 4.4-beta2 to adapt to many kinds of systems. +\`configure' configures bash 4.4-rc2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1458,7 +1458,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of bash 4.4-beta2:";; + short | recursive ) echo "Configuration of bash 4.4-rc2:";; esac cat <<\_ACEOF @@ -1651,7 +1651,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -bash configure 4.4-beta2 +bash configure 4.4-rc2 generated by GNU Autoconf 2.69 Copyright (C) 2012 Free Software Foundation, Inc. @@ -2360,7 +2360,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by bash $as_me 4.4-beta2, which was +It was created by bash $as_me 4.4-rc2, which was generated by GNU Autoconf 2.69. Invocation command line was $ $0 $@ @@ -2754,7 +2754,7 @@ ac_config_headers="$ac_config_headers config.h" BASHVERS=4.4 -RELSTATUS=beta2 +RELSTATUS=rc2 case "$RELSTATUS" in alp*|bet*|dev*|rc*|maint*) DEBUG='-DDEBUG' MALLOC_DEBUG='-DMALLOC_DEBUG' ;; @@ -16666,7 +16666,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by bash $as_me 4.4-beta2, which was +This file was extended by bash $as_me 4.4-rc2, which was generated by GNU Autoconf 2.69. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -16732,7 +16732,7 @@ _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ -bash config.status 4.4-beta2 +bash config.status 4.4-rc2 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 23f8678d..62d00582 100644 --- a/configure.ac +++ b/configure.ac @@ -24,7 +24,7 @@ dnl Process this file with autoconf to produce a configure script. AC_REVISION([for Bash 4.4, version 4.080])dnl define(bashvers, 4.4) -define(relstatus, beta2) +define(relstatus, rc2) AC_INIT([bash], bashvers-relstatus, [bug-bash@gnu.org]) diff --git a/execute_cmd.c b/execute_cmd.c index 80134659..c0260bf1 100644 --- a/execute_cmd.c +++ b/execute_cmd.c @@ -5384,9 +5384,10 @@ initialize_subshell () history_lines_this_session = 0; #endif -#if defined (JOB_CONTROL) /* Forget about the way job control was working. We are in a subshell. */ without_job_control (); + +#if defined (JOB_CONTROL) set_sigchld_handler (); init_job_stats (); #endif /* JOB_CONTROL */ diff --git a/nojobs.c b/nojobs.c index 95b7465c..fdbe0ae0 100644 --- a/nojobs.c +++ b/nojobs.c @@ -639,12 +639,13 @@ get_original_tty_job_signals () /* Wait for a single pid (PID) and return its exit status. Called by the wait builtin. */ int -wait_for_single_pid (pid) +wait_for_single_pid (pid, flags) pid_t pid; + int flags; { pid_t got_pid; WAIT status; - int pstatus, flags; + int pstatus; pstatus = find_status_by_pid (pid); @@ -995,6 +996,14 @@ stop_making_children () already_making_children = 0; } +/* The name is kind of a misnomer, but it's what the job control code uses. */ +void +without_job_control () +{ + stop_making_children (); + last_made_pid = NO_PID; /* XXX */ +} + int get_job_by_pid (pid, block) pid_t pid; diff --git a/subst.c b/subst.c index 57cf6103..2e88b3d1 100644 --- a/subst.c +++ b/subst.c @@ -498,6 +498,12 @@ dump_word_flags (flags) f &= ~W_HASDOLLAR; fprintf (stderr, "W_HASDOLLAR%s", f ? "|" : ""); } + if (f & W_COMPLETE) + { + f &= ~W_COMPLETE; + fprintf (stderr, "W_COMPLETE%s", f ? "|" : ""); + } + fprintf (stderr, "\n"); fflush (stderr); } @@ -814,9 +820,9 @@ string_extract (string, sindex, charlist, flags) Backslashes between the embedded double quotes are processed. If STRIPDQ is zero, an unquoted `"' terminates the string. */ static char * -string_extract_double_quoted (string, sindex, stripdq) +string_extract_double_quoted (string, sindex, flags) char *string; - int *sindex, stripdq; + int *sindex, flags; { size_t slen; char *send; @@ -825,11 +831,14 @@ string_extract_double_quoted (string, sindex, stripdq) char *temp, *ret; /* The new string we return. */ int pass_next, backquote, si; /* State variables for the machine. */ int dquote; + int stripdq; DECLARE_MBSTATE; slen = strlen (string + *sindex) + *sindex; send = string + slen; + stripdq = (flags & SX_STRIPDQ); + pass_next = backquote = dquote = 0; temp = (char *)xmalloc (1 + slen - *sindex); @@ -912,7 +921,7 @@ add_one_character: si = i + 2; if (string[i + 1] == LPAREN) - ret = extract_command_subst (string, &si, 0); + ret = extract_command_subst (string, &si, (flags & SX_COMPLETE)); else ret = extract_dollar_brace_string (string, &si, Q_DOUBLE_QUOTES, 0); @@ -4751,7 +4760,7 @@ getpattern (value, quoted, expandpat) if (expandpat && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *tword) { i = 0; - pat = string_extract_double_quoted (tword, &i, 1); + pat = string_extract_double_quoted (tword, &i, SX_STRIPDQ); free (tword); tword = pat; } @@ -6617,7 +6626,7 @@ parameter_brace_expand_rhs (name, value, c, quoted, pflags, qdollaratp, hasdolla if ((quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES)) && *value) { sindex = 0; - temp = string_extract_double_quoted (value, &sindex, 1); + temp = string_extract_double_quoted (value, &sindex, SX_STRIPDQ); } else temp = value; @@ -8688,7 +8697,9 @@ param_expand (string, sindex, quoted, expanded_something, case LPAREN: /* We have to extract the contents of this paren substitution. */ t_index = zindex + 1; - temp = extract_command_subst (string, &t_index, 0); + /* XXX - might want to check for string[t_index+2] == LPAREN and parse + as arithmetic substitution immediately. */ + temp = extract_command_subst (string, &t_index, (pflags&PF_COMPLETE) ? SX_COMPLETE : 0); zindex = t_index; /* For Posix.2-style `$(( ))' arithmetic substitution, @@ -9210,6 +9221,8 @@ add_string: pflags |= PF_NOSPLIT2; if (word->flags & W_ASSIGNRHS) pflags |= PF_ASSIGNRHS; + if (word->flags & W_COMPLETE) + pflags |= PF_COMPLETE; tword = param_expand (string, &sindex, quoted, expanded_something, &temp_has_dollar_at, "ed_dollar_at, &had_quoted_null, pflags); @@ -9348,7 +9361,7 @@ add_twochars: goto add_character; t_index = ++sindex; - temp = string_extract_double_quoted (string, &sindex, 0); + temp = string_extract_double_quoted (string, &sindex, (word->flags & W_COMPLETE) ? SX_COMPLETE : 0); /* If the quotes surrounded the entire string, then the whole word was quoted. */ @@ -9364,6 +9377,8 @@ add_twochars: /* XXX - bash-4.4/bash-5.0 */ if (word->flags & W_ASSIGNARG) tword->flags |= word->flags & (W_ASSIGNARG|W_ASSIGNRHS); /* affects $@ */ + if (word->flags & W_COMPLETE) + tword->flags |= W_COMPLETE; /* for command substitutions */ temp = (char *)NULL; diff --git a/subst.h b/subst.h index 7c96fc8d..b3a7be56 100644 --- a/subst.h +++ b/subst.h @@ -63,6 +63,7 @@ #define SX_POSIXEXP 0x0100 /* extracting new Posix pattern removal expansions in extract_dollar_brace_string */ #define SX_WORD 0x0200 /* extracting word in ${param op word} */ #define SX_COMPLETE 0x0400 /* extracting word for completion */ +#define SX_STRIPDQ 0x0800 /* strip double quotes when extracting double-quoted string */ /* Remove backslashes which are quoting backquotes from STRING. Modifies STRING, and returns a pointer to it. */ diff --git a/tests/RUN-ONE-TEST b/tests/RUN-ONE-TEST index a5ab273d..d29259a9 100755 --- a/tests/RUN-ONE-TEST +++ b/tests/RUN-ONE-TEST @@ -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