| #!/bin/bash |
| |
| check_file() { |
| local file="$1" |
| if [ -z "$file" ]; then |
| echo "No file passed!" |
| exit 1 |
| fi |
| if [ ! -f "$file" ]; then |
| return 1 |
| fi |
| |
| fuser -s "$file" |
| local ret=$? |
| if [ $ret -eq 1 ]; then # noone has file open |
| return 0 |
| fi |
| if [ $ret -eq 0 ]; then # file open by some processes |
| return 1 |
| fi |
| if [ $ret -eq 127 ]; then |
| echo "fuser command not found!" |
| exit 1 |
| fi |
| |
| echo "Unexpected exit code $ret from fuser!" |
| exit 1 |
| } |
| |
| wait_file() { |
| local file="$1" |
| local max_sleep=10 |
| check_file "$file" |
| local ret=$? |
| while [ $ret -ne 0 ] && [ $max_sleep -ne 0 ]; do |
| sleep 1 |
| max_sleep=$((max_sleep - 1)) |
| check_file $file |
| ret=$? |
| done |
| if [ $max_sleep -eq 0 ]; then |
| echo "The file does not exist or the test hung!" |
| exit 1 |
| fi |
| |
| } |
| file="$1" |
| wait_file "$file" |