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;

Reply via email to