bash 变量是否可以在运行之间保留

bash 变量是否可以在运行之间保留

我正在尝试创建一个查询losetup -f空闲循环设备的初始化脚本。在 init 脚本中,我有一个start()查询losetup -f自由循环设备来设置一些东西的文件,还有一个stop().

我无法弄清楚的问题是如何将输出存储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
}

这允许每个初始化脚本将其循环设备保存到一个文件中,如果以后需要获取分配给它的设备,则可以引用该文件。如果需要多个设备,您可以将它们全部回显到文件中(每行一个),并使用它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

相关内容