while : ; do
[[ -f "/path/to/file" ]] && break
echo "Pausing until file exists."
sleep 1
done
Без использования чего-то вроде inotify
, это примерно предел того, что вы собираетесь делать.
Петля while
выше просто :
так как его условие , которое в значительной степени просто означает «сделать это , пока мы не убить его.»
Важная строка - это [[
test. Условный тест здесь не использует оператор if
. Это потому, что [[
является действительной командой, а НЕ является частью оператора if
. Выполняется [[ -f "/path/to/file" ]]
а &&
проверяет состояние выхода команды [[
и выполняет следующий оператор, если это состояние выхода равно 0
(успех). Следующее утверждение здесь - это break
который закроет текущий цикл, в котором находится ваш скрипт.
Примечание: в bash
настоятельно рекомендуется использовать [[
вместо [
. Он обладает всеми возможностями [
но гораздо более мощный и простой в использовании.