49 lines
930 B
Bash
49 lines
930 B
Bash
#!/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"
|