サブシェルスクリプトの反復制御フロー

Syed Moez

別のスクリプト(B)によって呼び出されているシェルスクリプト(A)があります。このスクリプト(A)では、スクリプトの残りの部分が正常に機能するための準備作業として、いくつかのディレクトリを作成し、いくつかのファイルを移動しています。Script(A)はscript(B)によって反復的に呼び出されます。ディレクトリの作成とファイルの移動は、最初のループで1回だけ実行する必要があります。

スクリプトの一部を1回だけ実行するにはどうすればよいですか?

mikeserv

信頼できる環境の比較的ユニークな品質が必要です。これを実現するのは簡単ではありません。特に、ループ内で個別のスクリプトを繰り返し呼び出しており、発生するたびに動作が異なると予想される場合(その場合、同じスクリプトの一部ではないのはなぜですか?)

とにかく、一般的に行うことは、これらの種類のものにロックファイル(またはそのようなもの)を使用することです。ただし、これを行うには、その独自の環境が必要です。次のことを考慮してください。

sh -c 'echo "$PPID" "$$"
       for i in 1 2 3 4 5
       do sh -c "echo \"\$PPID\""
       done'

出力

25711 28929
28929
28929
28929
28929
28929

呼び出し元が環境変数$PPIDpidを提供することに依存できる場合は、それがまさに必要なものである可能性があります。例えば:

#!/bin/sh
#script a
LOCKDIR=${TMPDIR:-/tmp}/${0##*/}.$PPID

init() { mkdir "$LOCKDIR" || exit
#        do other initialization tasks
}

loop() { : do the iterable tasks here; }

[ -d "$LOCKDIR" ] || init
loop

...そして...

#!/bin/sh
#script b
a='/path/to/script/a'
for stuff in $things
do "$a" "$stuff"
done
rm -rf "${TMPDIR:-/tmp}/${a##*/}.$$"

しかし、真剣に、私はこの種のことを行うことが良い考えである多くの状況にまったく遭遇していません-私が別のシェルスクリプトを繰り返し呼び出していて、その環境に依存しなければならない場合、私はおそらく.スクリプトの内容を現在のシェルをそのように実行します。私がいた場合、私は、あること、これを行うだろう非常に確認してください、私が実行していたスクリプトがしっかり書かれていました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

シェルスクリプトのforループの反復回数を制限する方法

分類Dev

Linuxシェルスクリプトでの出力の制御

分類Dev

シェル スクリプト: json の配列の反復

分類Dev

サブシェル内からのループ制御

分類Dev

完全なハンドシェイク/フロー制御をサポートするUSB-シリアルRS232アダプタ

分類Dev

PHPシリアル化オブジェクトプロパティ名への制御文字の追加?

分類Dev

Googleドライブでのファイルのアップロード場所の制御(フォームではなくアプリスクリプト)

分類Dev

シェル スクリプトでバックグラウンド ジョブの数を制御する方法

分類Dev

ループ/その他の反復可能オブジェクトのPythonマルチプロセッシング

分類Dev

bash:ファイルリストを使用してforループ内のサブシェルを制限する

分類Dev

シェルスクリプトは数値制御です

分類Dev

シェルスクリプト:ネストされたforループの反復は1回だけ

分類Dev

Cron を使用したシェル スクリプトによるデーモン ソフトウェアの制御

分類Dev

CORSポリシーによってブロックされました:プリフライトリクエストへの応答はアクセス制御チェックに合格しません

分類Dev

ReactJS:CORSポリシーによってブロックされています:プリフライトリクエストへの応答がアクセス制御チェックに合格しません

分類Dev

発信元がCORSポリシーによってブロックされていますプリフライトリクエストへの応答がアクセス制御チェックに合格しません

分類Dev

GoogleドライブAPIファイルのサブスクリプションレート制限(403 SubscriptionRateLimitExceeded)

分類Dev

配列をループし、反復ごとにサブセットを取得して、オブジェクトのリストに格納します

分類Dev

シェルスクリプトのforループで単語ではなく行を反復する

分類Dev

シェフのエルブテンプレートで反復する方法

分類Dev

サブスクリプションがRxAndroid(Observable)でディスポーザブルに追加されると、制御フローはサブスクライブを呼び出さずに終了します。

分類Dev

リクエストオブジェクトの破棄を制御するためのオプション

分類Dev

Jqueryのスクロールトップ速度の制御

分類Dev

CORSポリシー:プリフライトリクエストへの応答がアクセス制御チェックに合格しない

分類Dev

オペレーティングシステムのプロセス制御ブロックの二重リンクリスト

分類Dev

シェルスクリプトで反復する文字列としてのタプルのTerraformリスト

分類Dev

jstlのフィールドとしてマップを持つオブジェクトのリストを反復する方法は?

分類Dev

CORSによってブロックされたリクエスト:プリフライトリクエストへの応答がアクセス制御チェックに合格しない:HTTPokステータスがない

分類Dev

グーグルアプリスクリプトシート計算制御

Related 関連記事

  1. 1

    シェルスクリプトのforループの反復回数を制限する方法

  2. 2

    Linuxシェルスクリプトでの出力の制御

  3. 3

    シェル スクリプト: json の配列の反復

  4. 4

    サブシェル内からのループ制御

  5. 5

    完全なハンドシェイク/フロー制御をサポートするUSB-シリアルRS232アダプタ

  6. 6

    PHPシリアル化オブジェクトプロパティ名への制御文字の追加?

  7. 7

    Googleドライブでのファイルのアップロード場所の制御(フォームではなくアプリスクリプト)

  8. 8

    シェル スクリプトでバックグラウンド ジョブの数を制御する方法

  9. 9

    ループ/その他の反復可能オブジェクトのPythonマルチプロセッシング

  10. 10

    bash:ファイルリストを使用してforループ内のサブシェルを制限する

  11. 11

    シェルスクリプトは数値制御です

  12. 12

    シェルスクリプト:ネストされたforループの反復は1回だけ

  13. 13

    Cron を使用したシェル スクリプトによるデーモン ソフトウェアの制御

  14. 14

    CORSポリシーによってブロックされました:プリフライトリクエストへの応答はアクセス制御チェックに合格しません

  15. 15

    ReactJS:CORSポリシーによってブロックされています:プリフライトリクエストへの応答がアクセス制御チェックに合格しません

  16. 16

    発信元がCORSポリシーによってブロックされていますプリフライトリクエストへの応答がアクセス制御チェックに合格しません

  17. 17

    GoogleドライブAPIファイルのサブスクリプションレート制限(403 SubscriptionRateLimitExceeded)

  18. 18

    配列をループし、反復ごとにサブセットを取得して、オブジェクトのリストに格納します

  19. 19

    シェルスクリプトのforループで単語ではなく行を反復する

  20. 20

    シェフのエルブテンプレートで反復する方法

  21. 21

    サブスクリプションがRxAndroid(Observable)でディスポーザブルに追加されると、制御フローはサブスクライブを呼び出さずに終了します。

  22. 22

    リクエストオブジェクトの破棄を制御するためのオプション

  23. 23

    Jqueryのスクロールトップ速度の制御

  24. 24

    CORSポリシー:プリフライトリクエストへの応答がアクセス制御チェックに合格しない

  25. 25

    オペレーティングシステムのプロセス制御ブロックの二重リンクリスト

  26. 26

    シェルスクリプトで反復する文字列としてのタプルのTerraformリスト

  27. 27

    jstlのフィールドとしてマップを持つオブジェクトのリストを反復する方法は?

  28. 28

    CORSによってブロックされたリクエスト:プリフライトリクエストへの応答がアクセス制御チェックに合格しない:HTTPokステータスがない

  29. 29

    グーグルアプリスクリプトシート計算制御

ホットタグ

アーカイブ