他のスクリプト(B)によって呼び出されるシェルスクリプト(A)があります。このスクリプト(A)では、残りのスクリプトが正しく機能する準備ができていくつかのディレクトリを作成し、いくつかのファイルを移動しました。スクリプト (A) はスクリプト (B) によって反復的な方法で呼び出され、最初のループ中にディレクトリの作成とファイルの移動が一度だけ発生したいと思います。
スクリプトの一部を一度だけ実行するにはどうすればよいですか?
ベストアンサー1
呼び出しスクリプトから呼び出しスクリプトにこの情報を渡す方法はいくつかあります。 1つは、パラメータ(./script --init
vs. ./script
)またはパラメータ値(./script --init=0
vs.)を使用することです./script --init=1
。最も簡単な方法は、環境変数を使用することです。
スクリプトB:
init=0
while whatever; do INIT=$((init++)) ./script_A; done
スクリプトA:
[...]
if [ 0 -eq "$INIT" ]; then
: make preparations
fi
[...]
スクリプトAがスクリプトBの呼び出しなしで実行できる場合は、欠落している変数を処理する必要があります(if
もちろんステートメントの前)。
: ${INIT:=1}