1

I want to write a shell that runs until something is written to a file (by another process). I have written this:

PID_FILE=log.txt
DONE=0
while [$DONE -eq 0]
do 
    cat $PID_FILE | while read LINE 
    do
    if [$LINE -neq ""]; then    
        echo "Do stuff here"
        $DONE=1
    fi  
    done
done    
echo "DONE"
echo "">$PID_FILE

but I get

test.sh: 3: test.sh: [0: not found
DONE
Random42
  • 8,989
  • 6
  • 55
  • 86
  • 1
    [$DONE -eq 0] => [ $DONE -eq 0 ], btw you can use the test program in place of the [ command. – BigMike Feb 28 '13 at 08:38

1 Answers1

6

This line:

while [$DONE -eq 0]

Needs spaces around the square brackets:

while [ $DONE -eq 0 ]

As does this one:

if [$LINE -neq ""]; then

Like this:

if [ $LINE -neq "" ]; then   

It helps when you know that \[ is a command. See Why should be there a space after '[' and before ']' in the Bash Script for an explanation.

Community
  • 1
  • 1
johnsyweb
  • 136,902
  • 23
  • 188
  • 247