В вашем примере кода отсутствует только один символ, !
.Вы хотите, чтобы цикл продолжался до тех пор, пока один из файлов не существует, а не пока он существует.Поэтому будет работать следующий код:
while ! [ -f /tmp/a1 ] || [ -f /tmp/a2 ]; do sleep 1; echo sleeping; done
Вместо !
и ||
оболочки можно также использовать параметры из теста ([
- это просто псевдоним для test
):
while [ ! -f /tmp/a1 -a ! -f /tmp/a2 ]; do sleep 1; echo sleeping; done
Обратите внимание, что !
теперь обрабатывается тестом ([
), а не оболочкой, а -a
означает и .Вы сами решаете, какая из двух реализаций вам понятнее (на мой взгляд, вторая).