diff options
Diffstat (limited to 'alt-rootfs-installer/shell-config')
| -rw-r--r-- | alt-rootfs-installer/shell-config | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/alt-rootfs-installer/shell-config b/alt-rootfs-installer/shell-config new file mode 100644 index 0000000..23243b3 --- /dev/null +++ b/alt-rootfs-installer/shell-config @@ -0,0 +1,91 @@ +#!/bin/sh -efu +### This file is covered by the GNU General Public License, +### which should be included with libshell as the file LICENSE. +### All copyright information are listed in the COPYING. + +if [ -z "${__included_shell_config-}" ]; then +__included_shell_config=1 + +. shell-error +. shell-quote + +__shell_config_comment='#' + +shell_config_get() +{ + [ "$#" -ge 2 ] && [ "$#" -le 3 ] || + fatal "Usage: shell_config_get file name [delim]" + local file="$1" name="$2" delim="${3-=}" + + [ -s "$file" ] || + return 0 + quote_sed_regexp_variable name "$name" + sed -n -e "s/^[[:space:]]*$name$delim//p" -- "$file" +} + +shell_config_set() +{ + [ "$#" -ge 3 ] && [ "$#" -le 5 ] || + fatal "Usage: shell_config_set file name value [read-delim [write-delim]]" + + local file="$1" name="$2" value="$3" r_delim="${4-=}" w_delim="${5-=}" + local n v nv='' created='' + + if [ ! -f "$file" ]; then + if [ ! -w "${file%/*}" ]; then + message "${file%/*}: not writable." + return 1 + fi + touch -- "$file" || + return 1 + created=1 + fi + + if [ -z "$created" ]; then + quote_sed_regexp_variable n "$name" + + if v="$(grep -m1 "^[[:space:]]*$n$r_delim" -- "$file" 2>/dev/null)"; then + if [ "${v#*$name$r_delim}" != "$value" ]; then + quote_sed_regexp_variable nv "$w_delim$value" + sed -i -e "s/^[[:space:]]*$n$r_delim.*/$n$nv/" -- "$file" + fi + return + fi + + if [ -n "${__shell_config_comment-}" ] && + v="$(grep -m1 "^[[:space:]]*${__shell_config_comment:-#}[[:space:]]*$n$r_delim" -- "$file" 2>/dev/null)"; then + quote_sed_regexp_variable v "$v" + quote_sed_regexp_variable nv "$w_delim$value" + sed -i -e "s/^$v\$/$n$nv/" -- "$file" + return + fi + fi + + printf '%s\n' "$name$w_delim$value" >> "$file" +} + +shell_config_del() +{ + [ "$#" -ge 2 ] && [ "$#" -le 3 ] || + fatal "Usage: shell_config_del file name [delim]" + local file="$1" name="$2" delim="${3-=}" + + [ -s "$file" ] || + return 0 + quote_sed_regexp_variable name "$name" + sed -i -e "/^[[:space:]]*$name$delim/d" -- "$file" +} + +shell_config_comment() +{ + [ "$#" -ge 2 ] && [ "$#" -le 3 ] || + fatal "Usage: shell_config_comment file name [delim]" + local file="$1" name="$2" delim="${3-=}" + + [ -s "$file" ] || + return 0 + quote_sed_regexp_variable name "$name" + sed -i -e "s/^[[:space:]]*$name$delim.*/${__shell_config_comment:-#}&/" -- "$file" +} + +fi #__included_shell_config |