状況を考えてください。
スクリプトファイル: main.sh
、sub1.sh
そしてsub2.sh
。
と。main
を呼び出したら、以下を使用してフォルダ内のすべてのファイルを実行します。sub1
sub2
main
for
for file in samples/*.jpg; do bash ./main.sh $file; done
そしてそれは素晴らしい作品です。
しかし、いくつかの値を計算していますが、テストが失敗した場合は、現在の実行を停止してループ内の次のファイルから再起動したいとsub1
思います。main
$file
main
たとえば、フォルダにjpgファイルが含まれていて01,...,09
そのファイルのテストが失敗した場合は、forを停止し、forをスキップし、残りのforを停止してforを起動します。sub1
04
sub1
04
sub2
04
main
04
main
05
テストは次のとおりです。
if (( $numcc % 3 == 0 ))
then
...
else
...
fi
答え1
main.sh
以下に3つのサンプルスクリプト、およびを示しますsub1.sh
。sub2.sh
投稿に記載されているとおりに電話してください。
for file in samples/*.jpg; do bash ./main.sh $file; done
デフォルトのアイデアは、sub1.sh
テストが失敗した場合に一時ファイルが生成され、sub2.sh
ファイルが存在することを確認することです。最後に、main.sh
ロックファイルは他の2つのスクリプトを呼び出すたびに削除されます。これはいいえ一時ファイルを処理するのに推奨される方法ですが、使用方法を説明するだけです。
テストをシミュレートするために、任意の整数が偶数であることを確認しました。実際のテスト条件をそこに変えてください。
コンテンツ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"
コンテンツ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
コンテンツ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 ''
実行インスタンスの1つのサンプル出力は次のとおりです。の性質上、上記の$RANDOM
コードを実行するたびに出力が異なります。
./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