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