From: Matthias Kruk Date: Mon, 12 Apr 2021 10:57:33 +0000 (+0900) Subject: include/conf: Add simple configuration module X-Git-Url: https://git.corax.cc/?a=commitdiff_plain;h=c0c7af87bbc049193f678cd4c8c2b057d66ce2ea;p=toolbox include/conf: Add simple configuration module The "conf" module provides a simple way for scripts to store and retrieve settings. Config files are stored per-script in $TOOLBOX_HOME/conf. --- diff --git a/include/conf.sh b/include/conf.sh new file mode 100644 index 0000000..1921cec --- /dev/null +++ b/include/conf.sh @@ -0,0 +1,70 @@ +#!/bin/bash + +__init() { + local script_name + + if ! include "log"; then + return 1 + fi + + script_name="${0##*/}" + script_name="${script_name%.*}" + + if [[ -z "$script_name" ]]; then + log_error "Could not determine script name" + return 1 + fi + + declare -xgr __conf_root="$TOOLBOX_HOME/conf" + declare -xgr __conf_file="$__conf_root/$script_name.conf" + + if ! mkdir -p "$__conf_root"; then + log_error "Could not create config dir" + return 1 + fi + + return 0 +} + +conf_get() { + local name="$1" + local default="$2" + + if ! grep -m 1 -oP "^$name=\K.*" "$__conf_file" 2>/dev/null; then + if (( $# <= 1 )); then + return 1 + fi + + echo "$default" + fi + + return 0 +} + +conf_unset() { + local name="$1" + + if ! sed -i -e "/^$name=.*/d" "$__conf_file" &> /dev/null; then + return 1 + fi + + return 0 +} + + +conf_set() { + local name="$1" + local value="$2" + + if conf_get "$name" &> /dev/null; then + if ! conf_unset "$name"; then + return 1 + fi + fi + + if ! echo "$name=$value" > "$__conf_file"; then + return 1 + fi + + return 0 +}