#!/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"