简体   繁体   中英

Stuck in an infinite while loop

I am trying to write this code so that if the process reads map finished in the pipe it increments a variable by 1 so that it eventually breaks out of the while loop. Otherwise it will add unique parameters to a keys file. However it goes into an infinite loop and never breaks out of the loop.

while [ $a -le 5 ]; do
    read input < map_pipe;
    if [ $input = "map finished" ]; then
            ((a++))
            echo $a
    else
            sort -u map_pipe >> keys.txt;
    fi
done

I decided to fix it for you, not sure if this is what you wanted, but I think I am close:

#!/bin/bash
a=0 #Initialize your variable to something
while [ $a -le 5 ]; do
    read input < map_pipe;
    if [ "$input" = "map finished" ]; then #Put double quotes around variables to allow values with spaces
        a=$(($a + 1)) #Your syntax was off, use spaces and do something with the output
    else
        echo $input >> keys.txt #Don't re-read the pipe, it's empty by now and sort will wait for the next input
        sort -u keys.txt > tmpfile #Instead sort your file, don't save directly into the same file it will break
        mv tmpfile keys.txt
        #sort -u keys.txt | sponge keys.txt #Will also work instead of the other sort and mv, but sponge is not installed on most machines
    fi  
done

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM