In the latest release of Bash on the toolbox website (5.0 Patch 18) I am running into a problem with one of my scripts and have isolated the issue. I did downgrade to the previous version of Bash from the toolbox (5.0, no patches) and it works fine.
What is happening is when I run a command (such as 'ls -al /etc') with a while loop and read the line it works fine sometimes but sometimes it does not. When it does not work fine it hangs once it reaches the end of the input that is being fed into the loop, it should see the EOF and automatically terminate but it does not. This previously worked fine 100% of the time.
I trussed the output and this is what we are getting when we reach the end of the line:
kfcntl(2, F_GETFL, 0x0FFFFFFFFFFFFFE8) = 67110914
kioctl(0, 22528, 0x0000000000000000, 0x0000000000000000) Err#25 ENOTTY
lseek(0, 0, 1) Err#29 ESPIPE
kread(0, "\t", 1) (sleeping...)
When it is working the kread function does not sleep, it just moves onto the next iteration in the while loop.
Here is a sample piece of code to recreate the issue:
SGLIST=("testfile1" "testfile1" "testfile1" "testfile1")
for sg in ${SGLIST[@]}
do
while read line
do
echo $line
done < <(ls -al /etc 2>&1)
done
This particular sample code reliably fails every time. The piece of code I have written fails with the same basic setup one out of every four times or so.
Any thoughts on this?
Thanks
------------------------------
Mike Whitton
------------------------------