Re: /dev/fd/62: No such file or directory
On Fri, Mar 28, 2014 at 06:14:27PM -0700, Linda Walsh wrote: > Does read varname <<<$(...) use process substitution? I wouldn't dare write it like that, because who knows how the parser will treat it. I'd write it this way: read varname <<< "$(...)" This is a command substitution and a here-string. Here-strings are implemented with a temporary file, I believe. > I'd think not.. but just to be safe... it's only the things > with '<(' in them? Process substitutions are <(...) and >(...). These are the ones that use either a named pipe, or a /dev/fd/* node.
Bash-4.3 Official Patch 1
BASH PATCH REPORT = Bash-Release: 4.3 Patch-ID: bash43-001 Bug-Reported-by:NBaH Bug-Reference-ID: Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00092.html Bug-Description: A missing check for a valid option prevented `test -R' from working. There is another problem that causes bash to look up the wrong variable name when processing the argument to `test -R'. Patch (apply with `patch -p0'): *** ../bash-4.3/test.c 2014-02-04 16:52:58.0 -0500 --- test.c 2014-02-28 21:22:44.0 -0500 *** *** 647,652 case 'R': ! v = find_variable (arg); ! return (v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v) ? TRUE : FALSE); } --- 647,652 case 'R': ! v = find_variable_noref (arg); ! return ((v && invisible_p (v) == 0 && var_isset (v) && nameref_p (v)) ? TRUE : FALSE); } *** *** 724,727 --- 724,728 case 'u': case 'v': case 'w': case 'x': case 'z': case 'G': case 'L': case 'O': case 'S': case 'N': + case 'R': return (1); } *** ../bash-4.3/patchlevel.h2012-12-29 10:47:57.0 -0500 --- patchlevel.h2014-03-20 20:01:28.0 -0400 *** *** 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 0 #endif /* _PATCHLEVEL_H_ */ --- 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 1 #endif /* _PATCHLEVEL_H_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/
Bash-4.3 Official Patch 2
BASH PATCH REPORT = Bash-Release: 4.3 Patch-ID: bash43-002 Bug-Reported-by:Moe Tunes Bug-Reference-ID: <53103f49.3070...@gmail.com> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00086.html Bug-Description: A change to save state while running the DEBUG trap caused pipelines to hang on systems which need process group synchronization while building pipelines. Patch (apply with `patch -p0'): *** ../bash-4.3/trap.c 2014-02-05 10:03:21.0 -0500 --- trap.c 2014-02-28 09:51:43.0 -0500 *** *** 921,925 #if defined (JOB_CONTROL) ! save_pipeline (1); /* XXX only provides one save level */ #endif --- 921,926 #if defined (JOB_CONTROL) ! if (sig != DEBUG_TRAP) /* run_debug_trap does this */ ! save_pipeline (1); /* XXX only provides one save level */ #endif *** *** 941,945 #if defined (JOB_CONTROL) ! restore_pipeline (1); #endif --- 942,947 #if defined (JOB_CONTROL) ! if (sig != DEBUG_TRAP) /* run_debug_trap does this */ ! restore_pipeline (1); #endif *** ../bash-4.3/patchlevel.h2012-12-29 10:47:57.0 -0500 --- patchlevel.h2014-03-20 20:01:28.0 -0400 *** *** 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 1 #endif /* _PATCHLEVEL_H_ */ --- 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 2 #endif /* _PATCHLEVEL_H_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/
Bash-4.3 Official Patch 3
BASH PATCH REPORT = Bash-Release: 4.3 Patch-ID: bash43-003 Bug-Reported-by:Anatol Pomozov Bug-Reference-ID: Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-readline/2014-03/msg00010.html Bug-Description: When in callback mode, some readline commands can cause readline to seg fault by passing invalid contexts to callback functions. Patch (apply with `patch -p0'): *** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.0 -0400 --- lib/readline/readline.c 2014-03-10 14:15:02.0 -0400 *** *** 745,749 RL_CHECK_SIGNALS (); ! if (r == 0) /* success! */ { _rl_keyseq_chain_dispose (); --- 745,750 RL_CHECK_SIGNALS (); ! /* We only treat values < 0 specially to simulate recursion. */ ! if (r >= 0 || (r == -1 && (cxt->flags & KSEQ_SUBSEQ) == 0)) /* success! or failure! */ { _rl_keyseq_chain_dispose (); *** ../bash-4.3/patchlevel.h2012-12-29 10:47:57.0 -0500 --- patchlevel.h2014-03-20 20:01:28.0 -0400 *** *** 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 2 #endif /* _PATCHLEVEL_H_ */ --- 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 3 #endif /* _PATCHLEVEL_H_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/
Bash-4.3 Official Patch 4
BASH PATCH REPORT = Bash-Release: 4.3 Patch-ID: bash43-004 Bug-Reported-by:Daan van Rossum Bug-Reference-ID: <20140307072523.ga14...@flash.uchicago.edu> Bug-Reference-URL: Bug-Description: The `.' command in vi mode cannot undo multi-key commands beginning with `c', `d', and `y' (command plus motion specifier). Patch (apply with `patch -p0'): *** ../bash-4.3/lib/readline/readline.c 2013-10-28 14:58:06.0 -0400 --- lib/readline/readline.c 2014-03-07 15:20:33.0 -0500 *** *** 965,969 if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && key != ANYOTHERKEY && ! rl_key_sequence_length == 1 && /* XXX */ _rl_vi_textmod_command (key)) _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); --- 965,969 if (rl_editing_mode == vi_mode && _rl_keymap == vi_movement_keymap && key != ANYOTHERKEY && ! _rl_dispatching_keymap == vi_movement_keymap && _rl_vi_textmod_command (key)) _rl_vi_set_last (key, rl_numeric_arg, rl_arg_sign); *** ../bash-4.3/patchlevel.h2012-12-29 10:47:57.0 -0500 --- patchlevel.h2014-03-20 20:01:28.0 -0400 *** *** 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 3 #endif /* _PATCHLEVEL_H_ */ --- 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 4 #endif /* _PATCHLEVEL_H_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/
Bash-4.3 Official Patch 5
BASH PATCH REPORT = Bash-Release: 4.3 Patch-ID: bash43-005 Bug-Reported-by:David Sines Bug-Reference-ID: Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00037.html Bug-Description: When in Posix mode, bash did not correctly interpret the ANSI-C-style $'...' quoting mechanism when performing pattern substitution word expansions within double quotes. Patch (apply with `patch -p0'): *** ../bash-4.3/parse.y 2014-02-11 09:42:10.0 -0500 --- parse.y 2014-03-07 20:57:15.0 -0500 *** *** 3399,3403 unescaped double-quotes or single-quotes, if any, shall occur." */ /* This was changed in Austin Group Interp 221 */ ! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') continue; --- 3399,3403 unescaped double-quotes or single-quotes, if any, shall occur." */ /* This was changed in Austin Group Interp 221 */ ! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') continue; *** ../bash-4.3/y.tab.c 2014-02-11 10:57:47.0 -0500 --- y.tab.c 2014-03-28 10:41:15.0 -0400 *** *** 5711,5715 unescaped double-quotes or single-quotes, if any, shall occur." */ /* This was changed in Austin Group Interp 221 */ ! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') continue; --- 5711,5715 unescaped double-quotes or single-quotes, if any, shall occur." */ /* This was changed in Austin Group Interp 221 */ ! if MBTEST(posixly_correct && shell_compatibility_level > 41 && dolbrace_state != DOLBRACE_QUOTE && dolbrace_state != DOLBRACE_QUOTE2 && (flags & P_DQUOTE) && (flags & P_DOLBRACE) && ch == '\'') continue; *** ../bash-4.3/patchlevel.h2012-12-29 10:47:57.0 -0500 --- patchlevel.h2014-03-20 20:01:28.0 -0400 *** *** 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 4 #endif /* _PATCHLEVEL_H_ */ --- 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 5 #endif /* _PATCHLEVEL_H_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/
Bash-4.3 Official Patch 6
BASH PATCH REPORT = Bash-Release: 4.3 Patch-ID: bash43-006 Bug-Reported-by:Eduardo A . Bustamante Lopez Bug-Reference-ID: <20140228170013.ga16...@dualbus.me> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-02/msg00091.html Bug-Description: A shell that started with job control active but was not interactive left the terminal in the wrong process group when exiting, causing its parent shell to get a stop signal when it attempted to read from the terminal. Patch (apply with `patch -p0'): *** ../bash-4.3/jobs.c 2014-01-10 09:05:34.0 -0500 --- jobs.c 2014-03-02 18:05:09.0 -0500 *** *** 4375,4379 end_job_control () { ! if (interactive_shell) /* XXX - should it be interactive? */ { terminate_stopped_jobs (); --- 4375,4379 end_job_control () { ! if (interactive_shell || job_control) /* XXX - should it be just job_control? */ { terminate_stopped_jobs (); *** ../bash-4.3/patchlevel.h2012-12-29 10:47:57.0 -0500 --- patchlevel.h2014-03-20 20:01:28.0 -0400 *** *** 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 5 #endif /* _PATCHLEVEL_H_ */ --- 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 6 #endif /* _PATCHLEVEL_H_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/
Bash-4.3 Official Patch 7
BASH PATCH REPORT = Bash-Release: 4.3 Patch-ID: bash43-007 Bug-Reported-by:geir.ha...@gmail.com Bug-Reference-ID: <20140318093650.b181c1c5...@gina.itea.ntnu.no> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00095.html Bug-Description: Using compound assignments for associative arrays like assoc=( [x]= [y]=bar ) left the value corresponding to the key `x' NULL. This caused subsequent lookups to interpret it as unset. Patch (apply with `patch -p0'): *** ../bash-4.3/arrayfunc.c 2013-08-02 16:19:59.0 -0400 --- arrayfunc.c 2014-03-18 11:08:15.0 -0400 *** *** 598,601 --- 598,606 { val = expand_assignment_string_to_string (val, 0); + if (val == 0) + { + val = (char *)xmalloc (1); + val[0] = '\0';/* like do_assignment_internal */ + } free_val = 1; } *** ../bash-4.3/patchlevel.h2012-12-29 10:47:57.0 -0500 --- patchlevel.h2014-03-20 20:01:28.0 -0400 *** *** 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 6 #endif /* _PATCHLEVEL_H_ */ --- 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 7 #endif /* _PATCHLEVEL_H_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/
Bash-4.3 Official Patch 8
BASH PATCH REPORT = Bash-Release: 4.3 Patch-ID: bash43-008 Bug-Reported-by:Stephane Chazelas Bug-Reference-ID: <20140318135901.gb22...@chaz.gmail.com> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-03/msg00098.html Bug-Description: Some extended glob patterns incorrectly matched filenames with a leading dot, regardless of the setting of the `dotglob' option. Patch (apply with `patch -p0'): *** ../bash-4.3/lib/glob/gmisc.c2013-10-28 14:45:25.0 -0400 --- lib/glob/gmisc.c2014-03-19 09:16:08.0 -0400 *** *** 211,214 --- 211,215 case '!': case '@': + case '?': return (pat[1] == LPAREN); default: *** ../bash-4.3/lib/glob/glob.c 2014-01-31 21:43:51.0 -0500 --- lib/glob/glob.c 2014-03-20 09:01:26.0 -0400 *** *** 180,202 int flags; { ! char *pp, *pe, *t; ! int n, r; pp = pat + 2; ! pe = pp + strlen (pp) - 1; /*(*/ ! if (*pe != ')') ! return 0; ! if ((t = strchr (pp, '|')) == 0)/* easy case first */ { *pe = '\0'; r = skipname (pp, dname, flags);/*(*/ *pe = ')'; return r; } while (t = glob_patscan (pp, pe, '|')) { n = t[-1]; t[-1] = '\0'; r = skipname (pp, dname, flags); t[-1] = n; if (r == 0) /* if any pattern says not skip, we don't skip */ --- 180,215 int flags; { ! char *pp, *pe, *t, *se; ! int n, r, negate; + negate = *pat == '!'; pp = pat + 2; ! se = pp + strlen (pp) - 1; /* end of string */ ! pe = glob_patscan (pp, se, 0); /* end of extglob pattern (( */ ! /* we should check for invalid extglob pattern here */ ! /* if pe != se we have more of the pattern at the end of the extglob ! pattern. Check the easy case first ( */ ! if (pe == se && *pe == ')' && (t = strchr (pp, '|')) == 0) { *pe = '\0'; + #if defined (HANDLE_MULTIBYTE) + r = mbskipname (pp, dname, flags); + #else r = skipname (pp, dname, flags);/*(*/ + #endif *pe = ')'; return r; } + + /* check every subpattern */ while (t = glob_patscan (pp, pe, '|')) { n = t[-1]; t[-1] = '\0'; + #if defined (HANDLE_MULTIBYTE) + r = mbskipname (pp, dname, flags); + #else r = skipname (pp, dname, flags); + #endif t[-1] = n; if (r == 0) /* if any pattern says not skip, we don't skip */ *** *** 205,219 } /*(*/ ! if (pp == pe) /* glob_patscan might find end of pattern */ return r; ! *pe = '\0'; ! # if defined (HANDLE_MULTIBYTE) ! r = mbskipname (pp, dname, flags); /*(*/ ! # else ! r = skipname (pp, dname, flags);/*(*/ ! # endif ! *pe = ')'; ! return r; } #endif --- 218,227 } /*(*/ ! /* glob_patscan might find end of pattern */ ! if (pp == se) return r; ! /* but if it doesn't then we didn't match a leading dot */ ! return 0; } #endif *** *** 278,289 { #if EXTENDED_GLOB ! wchar_t *pp, *pe, *t, n; ! int r; pp = pat + 2; ! pe = pp + wcslen (pp) - 1; /*(*/ ! if (*pe != L')') ! return 0; ! if ((t = wcschr (pp, L'|')) == 0) { *pe = L'\0'; --- 286,298 { #if EXTENDED_GLOB ! wchar_t *pp, *pe, *t, n, *se; ! int r, negate; + negate = *pat == L'!'; pp = pat + 2; ! se = pp + wcslen (pp) - 1; /*(*/ ! pe = glob_patscan_wc (pp, se, 0); ! ! if (pe == se && *pe == ')' && (t = wcschr (pp, L'|')) == 0) { *pe = L'\0'; *** *** 292,295 --- 301,306 return r; } + + /* check every subpattern */ while (t = glob_patscan_wc (pp, pe, '|')) { *** *** 306,313 return r; ! *pe = L'\0'; ! r = wchkname (pp, dname); /*(*/ ! *pe = L')'; ! return r; #else return (wchkname (pat, dname)); --- 317,322 return r; ! /* but if it doesn't then we didn't match a leading dot */ ! return 0; #else return (wchkname (pat, dname)); *** ../bash-4.3/patchlevel.h2012-12-29 10:47:57.0 -0500 --- patchlevel.h2014-03-20 20:01:28.0 -0400 *** *** 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 7 #endif /* _PATCHLEVEL_H_ */ --- 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 8 #endif /* _PATCHLEVEL_H_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/
Bash-4.2 Official Patch 46
BASH PATCH REPORT = Bash-Release: 4.2 Patch-ID: bash42-046 Bug-Reported-by:"Theodoros V. Kalamatianos" Bug-Reference-ID: <20140112011131.ge17...@infinity.metashade.com> Bug-Reference-URL: http://lists.gnu.org/archive/html/bug-bash/2014-01/msg00044.html Bug-Description: Bash-4.2 patch 32 introduced a problem with "$@" and arrays expanding empty positional parameters or array elements when using substring expansion, pattern substitution, or case modfication. The empty parameters or array elements are removed instead of expanding to empty strings (""). Patch (apply with `patch -p0'): *** ../bash-4.2-patched/subst.c 2012-12-31 11:52:56.0 -0500 --- subst.c 2014-03-31 14:19:56.0 -0400 *** *** 7243,7247 ret = alloc_word_desc (); ret->word = temp1; ! if (temp1 && QUOTED_NULL (temp1) && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) ret->flags |= W_QUOTED|W_HASQUOTEDNULL; return ret; --- 7243,7253 ret = alloc_word_desc (); ret->word = temp1; ! /* We test quoted_dollar_atp because we want variants with double-quoted !"$@" to take a different code path. In fact, we make sure at the end !of expand_word_internal that we're only looking at these flags if !quoted_dollar_at == 0. */ ! if (temp1 && ! (quoted_dollar_atp == 0 || *quoted_dollar_atp == 0) && ! QUOTED_NULL (temp1) && (quoted & (Q_HERE_DOCUMENT|Q_DOUBLE_QUOTES))) ret->flags |= W_QUOTED|W_HASQUOTEDNULL; return ret; *** ../bash-4.2-patched/patchlevel.hSat Jun 12 20:14:48 2010 --- patchlevel.hThu Feb 24 21:41:34 2011 *** *** 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 45 #endif /* _PATCHLEVEL_H_ */ --- 26,30 looks for to find the patch level (for the sccs version string). */ ! #define PATCHLEVEL 46 #endif /* _PATCHLEVEL_H_ */ -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, ITS, CWRUc...@case.eduhttp://cnswww.cns.cwru.edu/~chet/
Reverse incremental search provoking errors
In bash-4.3-beta2 a new feature has been introduced under 2. a. Changed message when an incremental search fails to include "failed" in the prompt and display the entire search string instead of just the last matching portion. But there's another side effect to this: the string matching the characters typed first is returned, although failed is printed. I understand the good intent of this feature, but coming from bash 4.2, I find it quite disturbing, as it's provoking errors if one doesn't check, if reverse search has succeeded or failed (e.g. for a long string) and just presses enter. While this has not happened to me yet, I found the previous behaviour very comfortable and safe. If no matching results are present I don't think its a good idea to print 'failed' and just return the next best match. (Not very realistic) example search for "longcommand remember-the-milk" and a typo: "[Ctrl-r] remember-the-milk" may return "rm somefiles". One has to look carefully look if the search has failed otherwise, which many people don't do, especially if they're using to the previous behaviour. I didn't find a way to turn this feature of and get the old behaviour. Is it possible to at least make it optional in the next release that the next best match is returned? I think most people will notice it just now as it found its way into Ubuntu 14.04 LTS released in two weeks, so it will probably stay for a while. Best regards Thomas