Teofrostus
Teofrostus

Reputation: 1636

What does the left angle bracket after a while loop mean in bash?

The following is from /etc/init.d/functions on RHEL. I'm trying to figure out what the __pids_var_run() function does when I came across this while loop.

            while : ; do
                    read line
                    [ -z "$line" ] && break
                    for p in $line ; do
                            if [ -z "${p//[0-9]/}" -a -d "/proc/$p" ] ; then
                                    if [ -n "$binary" ] ; then
                                            local b=$(readlink /proc/$p/exe | sed -e 's/\s*(deleted)$//')
                                            [ "$b" != "$binary" ] && continue
                                    fi
                                    pid="$pid $p"
                            fi
                    done
            done < "$pid_file"

Could someone explain what while : ; do ; ... done < "$pid_file" does? More specifically, the last part after done, as the rest of it more or less makes sense.

Upvotes: 5

Views: 666

Answers (2)

alfC
alfC

Reputation: 16300

It means that any command in the loop that reads something from stdin will read from the given file (instead of the keyboard, for example).

In this case in particular, the loop uses read line to read a single line from stdin, so when you redirect from $pidfile it effectively reads the file line by line.

To further read about redirections, here's an Illustrated redirection tutorial which is recommended by this Bash Guide by Lhunath and GreyCat.

Upvotes: 5

Robert J
Robert J

Reputation: 320

I see that this quesiton is already answered (I cannot comment because I did a bounty), but I think you should check out this site when you get a chance:

http://mywiki.wooledge.org/BashFAQ/001

This guy (or gal) really dives in to proper and improper syntax with examples.

Upvotes: 3

Related Questions