Usando a sugestão de Stephen Kitt nos comentários:
find . -type f -iname "*.sh" -exec sh -c 'for n; do ./testScripts.sh "$n" || exit 1; done' sh {} +
Isso fará com que o script sh -c saia com um status de saída diferente de zero, assim como testScript.sh . Isso significa que find também sairá com um status de saída diferente de zero:
If terminated by a plus sign, the pathnames for which the primary is evaluated are aggregated into sets, and utility will be invoked once per set, similar to
xargs(1). If any invocation exits with a non-zero exit status, thenfindwill eventually do so as well, but this does not causefindto exit early.
Com relação às perguntas no comentário:
-
for n; do ... ; doneparece estranho, mas faz sentido quando você percebe que sem nada para iterar, oforirá iterar sobre"$@"implicitamente. -
O
shfinal no final será colocado em$0do shellsh -c. O{}será substituído por um número de caminhos. Semsh, o primeiro nome de caminho terminaria em$0e não seria escolhido pelo loop, já que não está em$@.$0geralmente contém o nome do intérprete atual (bem, seu valor é arbitrário, algumas pessoas usam_aqui).