while [ -f /tmp/restarting_server ] ; do {
[ $((i=i+1)) -ge 10 ] && exit 1
sleep 1
} ; done
Você não precisa de find se já sabe o nome do arquivo, o nome do caminho exato e as condições sob as quais um arquivo deve ser aceito de forma aceitável.
Assim, o outro problema - sair do seu script da sua declaração -exec - talvez não seja o problema que você considera ser. find não cria uma opção para kill ing seu shell pai porque o shell já o fornece.
find … -exec sh -c kill\ $$ \;
Considere também que você pode usar essa construção para sinalização com base em caminhos existentes, mesmo que não tenha certeza de onde eles estarão:
trap 'stuff to do' USR1
… #later…
find … -exec sh -c kill\ -USR1\ $$ \;
E isso também abre muitas outras opções para você:
find … -exec sh -c exec…
EDITAR:
Acabei de pensar em outras opções que envolvem parameter expansion para fazer com que seu shell saia sem find ' -exec ', o que poderia ser usado de outras maneiras:
hold_file="$(find . -name file)"
${hold_file:+false} : || exit 1
ou
N= ; hold_file="$(find . -name file)"
${hold_file:+${N:?lock file remains, exiting...}}
Os dois só causarão uma saída se a variável à qual você atribui find stdout não for null ou não definida. E, claro, caso deseje falhar com base em um achado vazio, você pode fazer o mesmo com :- em vez de :+ e omitir totalmente a variável de valor $N ull.
Ou apenas para alterar o status de saída de find :
$(find . -name file -exec echo false \; ) : || exit 1