I have a problem in one of my shell scripts. Asked a few colleagues, but they all just shake their heads (after some scratching), so I’ve come here for an answer.
According to my understanding the following shell script should print “Count is 5″ as the last line. Except it doesn’t. It prints “Count is 0″. If the “while read” is replaced with any other kind of loop, it works just fine. Here’s the script:
echo "1">input.data echo "2">>input.data echo "3">>input.data echo "4">>input.data echo "5">>input.dataCNT=0 cat input.data | while read ; do let CNT++; echo "Counting to $CNT" done echo "Count is $CNT"
Why does this happen and how can I prevent it? I’ve tried this in Debian Lenny and Squeeze, same result (i.e. bash 3.2.39 and bash 4.1.5.
I fully admit to not being a shell script wizard, so any pointers would be appreciated.