1 is not safe, unusual PID value

2011-12-25 Thread Askar Safin
In jobs.c we see:

#if defined (RECYCLES_PIDS)
  if (last_asynchronous_pid == mypid)
/* Avoid pid aliasing.  1 seems like a safe, unusual pid value. */
last_asynchronous_pid = 1;
#endif

1 is not safe, unusual PID value, because:

1. Linux kernel sometimes start with option "init=/bin/bash"
2. Embeged systems offen have init, written in bash or /bin/sh, which is 
symlink to bash
3. Mostly all inits of initrd/initramfs written in shell, which may be symlink 
to bash

Please, fix

Re: '>;' redirection operator

2011-12-25 Thread Roman Rakus

Feel free to write a patch.

RR



how to understand echo ${PATH#*:}

2011-12-25 Thread lina

Hi,

how to understand
echo ${PATH#*:}

the #*:
I don't get it. why the first path before : was gone.

Thanks,



Re: how to understand echo ${PATH#*:}

2011-12-25 Thread Bob Proulx
lina wrote:
> how to understand
> echo ${PATH#*:}
> 
> the #*:
> I don't get it. why the first path before : was gone.

This is really a help-bash question.  Please send all follow-ups
there.

The documentation says:

   ${parameter#word}
   ${parameter##word}
  Remove matching prefix pattern.  The word is expanded to produce
  a pattern just as in pathname expansion.  If the pattern matches
  the  beginning of the value of parameter, then the result of the
  expansion is the expanded value of parameter with  the  shortest
  matching  pattern  (the ``#'' case) or the longest matching pat-
  tern (the ``##'' case) deleted.  If parameter is  @  or  *,  the
  pattern  removal operation is applied to each positional parame-
  ter in turn, and the expansion is the resultant list.  If param-
  eter  is  an array variable subscripted with @ or *, the pattern
  removal operation is applied to each  member  of  the  array  in
  turn, and the expansion is the resultant list.

Since PATH is a series of directories separated by colons "#*:" will
match and therefore remove the first element of the PATH.

  $ foo=one:two:three
  $ echo ${foo#*:}
  two:three

And using two pound signs "##" would match the loggest pattern and
remove all up through the last one.

  $ echo ${foo##*:}
  three

Bob