The following shell script snippit will continually check and wait for the presence of a file until it is found, or until it reaches a timeout period, which in this case, is about 10 seconds, whichever come first.
#/bin/sh x=0 while [ "$x" -lt 100 -a ! -e /path/to/the/file_name ]; do x=$((x+1)) sleep .1 done
This can be helpful to prevent a race condition in a script if you’re say, mounting a filesystem from an external device. You could take it a step further and print useful messages as well:
#/bin/sh $FILE="/path/to/the/file_name" x=0 while [ "$x" -lt 100 -a ! -e $FILE ]; do x=$((x+1)) sleep .1 done if [ -e $FILE ] then echo "Found: $FILE" else echo "File $FILE not found within time limit!" fi
Another, maybe more elegant, solution is to use the
Wait for your background process whose process ID is pid and report its termination status. If pid is omitted, all your shell’s currently active background processes are waited for and the return code will be 0. The wait utility accepts a job identifier, when Job Control is enabled (jsh), and the argument, jobid, is preceded by a percent sign (%).
If pid is not an active process ID, the wait utility will return immediately and the return code will be 0.