While hacking on some init scripts, I learned that using a pipe with read to spawn sub-processes has an interesting side-effect on variables. This may save someone a little headache later on.
For example:
PIDS="" ps ax | grep ruby | grep gearman | while read line do pid=`echo $line | cut -f 1 -d ' '` PIDS="${PIDS},${pid}" done echo -n "..." echo $PIDS # --> ""
This is definitely not the desired outcome. The side-effect of forking sub-processes is that variables are reset.
Here is the solution, forking, and then redirecting the output to the while read; do … done loop.
PIDS="" while read line do pid=`echo $line | cut -f 1 -d ' '` PIDS="${PIDS},${pid}" done < <(ps ax | grep ruby | grep gearman) echo $PIDS # --> ",12345,6789,1234"