Três scripts de amostra, main.sh
, sub1.sh
e sub2.sh
são mostrados abaixo. Eles são invocados como mencionado no post, ou seja,
for file in samples/*.jpg; do bash ./main.sh $file; done
A idéia básica é que sub1.sh
cria um arquivo temporário se o teste falhar; sub2.sh
verifica a existência desse arquivo. Finalmente, o arquivo de bloqueio é removido em main.sh
toda vez que os outros dois scripts são invocados. Por favor, note que este não é a maneira recomendada para lidar com arquivos temporários, mas apenas para ilustrar o uso.
Para simular o teste, verifiquei se um inteiro aleatório é par ou não. Substitua suas condições reais de teste lá.
O conteúdo de main.sh
:
#!/bin/bash
export LOCK_FILE=sub1_failed.txt
echo "$0 $1"
[ -f "$LOCK_FILE" ] && rm "$LOCK_FILE"
bash ./sub1.sh "$1"
bash ./sub2.sh "$1"
O conteúdo de sub1.sh
:
#!/bin/bash
echo "$0 $1"
if (( $RANDOM % 2 == 0 ))
then
# Test failed
echo "> $0 failed: Creating $LOCK_FILE ..."
touch "$LOCK_FILE"
else
# Test successful
:
fi
O conteúdo de sub2.sh
:
#!/bin/bash
echo "$0 $1"
if [ -f "$LOCK_FILE" ]
then
echo 'Skipping sub2.sh'
exit 1
else
echo 'Executing sub2.sh as usual'
fi
echo 'sub2.sh done'
echo ''
A saída de amostra de uma das instâncias de execução é mostrada abaixo. Devido à natureza de $RANDOM
, a saída seria diferente toda vez que você executar o código acima.
./main.sh samples/01.jpg
./sub1.sh samples/01.jpg
> ./sub1.sh failed: Creating sub1_failed.txt ...
./sub2.sh samples/01.jpg
Skipping sub2.sh
./main.sh samples/02.jpg
./sub1.sh samples/02.jpg
> ./sub1.sh failed: Creating sub1_failed.txt ...
./sub2.sh samples/02.jpg
Skipping sub2.sh
./main.sh samples/03.jpg
./sub1.sh samples/03.jpg
./sub2.sh samples/03.jpg
Executing sub2.sh as usual
sub2.sh done
./main.sh samples/04.jpg
./sub1.sh samples/04.jpg
> ./sub1.sh failed: Creating sub1_failed.txt ...
./sub2.sh samples/04.jpg
Skipping sub2.sh
./main.sh samples/05.jpg
./sub1.sh samples/05.jpg
./sub2.sh samples/05.jpg
Executing sub2.sh as usual
sub2.sh done