On 9/16/16 1:51 AM, Eric Pruitt wrote: > Bash Version: 4.4 > Patch Level: 0 > Release Status: release > > Description: > I have a script that execute `if [[ "$(<"/proc/$1/cmdline")" = tmux* > ]];`. > All /proc/*/cmdline include null bytes, and as of Bash 4.4, this > results in > a warning being spewed on stderr which did not happen in Bash 4.3. > > Repeat-By: > echo "$(<"/proc/$$/cmdline")" > > Fix: > Is this even an intentional change? I looked at some of the other > internal_warning invocations, and they were commented out using "#if 0 > ... > #endif."
Try the attached patch, which reduces the number of warnings to 1 per call to command substitution. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://cnswww.cns.cwru.edu/~chet/
*** ../bash-4.4/subst.c 2016-08-30 16:46:38.000000000 -0400 --- subst.c 2016-09-26 10:20:19.000000000 -0400 *************** *** 5932,5935 **** --- 5933,5937 ---- int istring_index, istring_size, c, tflag, skip_ctlesc, skip_ctlnul; ssize_t bufn; + int nullbyte; istring = (char *)NULL; *************** *** 5939,5942 **** --- 5941,5946 ---- skip_ctlesc |= *s == CTLESC, skip_ctlnul |= *s == CTLNUL; + nullbyte = 0; + /* Read the output of the command through the pipe. This may need to be changed to understand multibyte characters in the future. */ *************** *** 5957,5961 **** { #if 1 ! internal_warning ("%s", _("command substitution: ignored null byte in input")); #endif continue; --- 5961,5969 ---- { #if 1 ! if (nullbyte == 0) ! { ! internal_warning ("%s", _("command substitution: ignored null byte in input")); ! nullbyte = 1; ! } #endif continue;