#!/bin/sh LC_ALL=C err() { if [ $# -ne 2 ]; then err 1 "err expect 2 arguments: exit_number \"message\"" >&2 fi echo "$2" >&2 exit $1 } list_alt() { for cf in `find ${ALTERNATIVECONF} -type f -depth 2 -name "*.cf"`; do . $cf printf "%-20s -- %s\n" "$NAME" "$DESCRIPTION" done } get_alt() { [ -d ${ALTERNATIVECONF}/$1 ] || err 1 "No alternative for $1" [ -f ${ALTERNATIVECONF}/$1/$1.cf ] || err 1 "Corrupted alternative for $1" for cf in `find ${ALTERNATIVECONF}/$1 -type f -depth 2 -name "*.cf"`; do . $cf printf "%-20s -- %s\n" "$NAME" "$DESCRIPTION" done if [ -e ${ALTERNATIVECONF}/$1/current ]; then CURRENTALT=`realpath ${ALTERNATIVECONF}/$1/current` echo "${CURRENTALT##*/} is default" else echo "None set currently" fi } set_alt() { [ -d ${ALTERNATIVECONF}/$1 ] || err 1 "No alternative for $1" [ -f ${ALTERNATIVECONF}/$1/$1.cf ] || err 1 "Corrupted alternative for $1" [ -d ${ALTERNATIVECONF}/$1/$2 ] || err 1 "No such $2 option for $1" [ -f ${ALTERNATIVECONF}/$1/$2/$2.cf ] || err 1 "Corrupted option $2 for $1" [ -w ${ALTERNATIVECONF}/$1 ] || err 1 "Permission denied" if [ -e ${ALTERNATIVECONF}/$1/current ]; then [ -w ${ALTERNATIVECONF}/$1/current ] || err 1 "Permission denied" rm -f ${ALTERNATIVECONF}/$1/current fi ln -sf ${ALTERNATIVECONF}/$1/$2 ${ALTERNATIVECONF}/$1/current } usage() { echo "Usage: alternative command [options] Commands: list -- list available alternative module get -- get the value of a module set -- set the value of a module" exit 1 } [ $# -lt 1 ] && usage ALTERNATIVEPATH=`realpath $0` ALTERNATIVEPREFIX=${ALTERNATIVEPATH%\/bin/*} ALTERNATIVECONF=${ALTERNATIVEPREFIX}/etc/alternative.d CMD=$1 shift case ${CMD} in list) [ $# -ne 0 ] && usage list_alt ;; get) [ $# -ne 1 ] && usage get_alt $@ ;; set) [ $# -ne 2 ] && usage set_alt $@ ;; *) echo "Unknown command ${CMD}" usage ;; esac