bash変数は実行間で維持できますか?

bash変数は実行間で維持できますか?

losetup -fアイドルループデバイスを照会する初期化スクリプトを生成しようとしています。 initスクリプトは、いくつかの項目を設定するために自由ループデバイスを照会start()するファイルと 。losetup -fstop()

私が理解できない問題は、出力をlosetup -f永続的な物質に保存してユーザーの驚き(環境変数の上書きなど)を防ぎ、stop()この特定の初期化スクリプトが呼び出されるたびに割り当てられたループデバイスにアクセスできるようにする方法です。に 。

ループデバイスを常に割り当てる必要があるのは、ループデバイスを処理する2〜3個の初期化スクリプト(初期化スクリプトごとに少なくとも2つのループデバイス)があり、各初期化スクリプトが独自に追跡する必要があるためです。

複数の出力をlosetup -fファイルに割り当てて分離/使用する必要がある場合は、ループから再読み込みできるようにする必要がありますか?それでは、そのようなデータの標準ディレクトリは何ですか?

答え1

コメントに基づいてソリューションを作成しました。

start() {
    loop=$(losetup -f)
    echo "$loop" > /var/run/init-script-name.loop
    #continue to use $loop as the reference to your loop device
}

stop() {
    loop=$(cat /var/run/init-script-name.loop)
    rm /var/run/init-script-name.loop
    #continue to use $loop as the reference to this scripts loop device
}

これにより、各初期化スクリプトは、後で割り当てられたデバイスをインポートする必要がある場合に参照できるファイルにループデバイスを保存できます。複数のデバイスが必要な場合は、すべてのデバイスをファイル(1行に1つずつ)に表示し、それを使用してwhile read -r /path/to/file繰り返し可能な配列などの構造を作成できます。

答え2

たぶんこれは役に立ちます。

変数の保存、

declare -p var_name another_var more_vars > path_to_init_file

検索、

source path_to_init_file

答え3

私はこの素晴らしいとシンプルなプロジェクト(再構築されたフォーク)を見つけました。完璧に見えますね。

https://github.com/imyller/kv-sh

  • 小さなキーと値のデータベース
  • 設定可能なデータベースディレクトリ(デフォルト~/.kv-sh:)
  • 関数を取得して使用する$ . ./kv-sh
  • データベース全体のダンプ/復元
  • セカンダリ読み取り専用プライマリデータベースのサポート
    . ./kv-sh                  # import kv-sh functions (use default database directory; see
                                 configuration environment variables for available options)
    kvset <key> <value>        # assign value to key
    kvget <key>                # get value of key
    kvdel <key>                # delete key
    kvexists <key>             # check if key exists
    kvkeys {-l|-d|-a}          # list all keys (-l local only, -d default only, -a all (default))
    kvlist {-a}                # list all key/value pairs (-a all keys, including default)
    kvdump {-a}                # database dump (-a all keys, including default)
    kvimport                   # database import (overwrite)
    kvrestore                  # database restore (clear and restore)
    kvclear                    # clear database

プライマリデータベース

kv-shセカンダリ読み取り専用プライマリデータベースをサポートします。有効な場合、ローカル値が指定されていない場合は、データベースの主キーと値のペアを返します。

設定でプライマリデータベースを有効にしますDB_DEFAULTS_DIR

DB_DIR="/tmp/.kv" DB_DEFAULTS_DIR="/tmp/.kv-default" . ./kv-sh

関連情報