Index: usr.sbin/service/service.sh =================================================================== --- usr.sbin/service/service.sh +++ usr.sbin/service/service.sh @@ -46,6 +46,26 @@ echo '' } +load_script_vars() { + eval "$( SQ="'" sh -c ' + exec 9<&1 > /dev/null 2>&1 + . /etc/rc.subr + load_rc_config() { name="$1"; } + run_rc_command() { :; } + dumpvar() { + eval local left= right=\"\$$var\" + while case "$right" in *$SQ*) : ;; *) false; esac; do + left="$left${right%%$SQ*}$SQ\\$SQ$SQ" + right="${right#*$SQ}" + done + echo "$var=$SQ$left${right#*$SQ}$SQ" + } + # Trap expanded $* since script could alter it before EXIT + trap "for var in $*; do dumpvar >&9; done" EXIT + . "$0" + ' -- "$@" )" +} + while getopts 'ehlrRv' COMMAND_LINE_ARGUMENT ; do case "${COMMAND_LINE_ARGUMENT}" in e) ENABLED=eopt ;; @@ -69,9 +89,8 @@ for file in `reverse_list ${files}`; do if grep -q ^rcvar $file; then - eval `grep ^name= $file` - eval `grep ^rcvar $file` - if [ -n "$rcvar" ]; then + load_script_vars $file name rcvar + if [ -n "$name" -a -n "$rcvar" ]; then load_rc_config_var ${name} ${rcvar} fi checkyesno $rcvar 2>/dev/null && run_rc_script ${file} stop @@ -79,8 +98,7 @@ done for file in $files; do if grep -q ^rcvar $file; then - eval `grep ^name= $file` - eval `grep ^rcvar $file` + load_script_vars $file name rcvar checkyesno $rcvar 2>/dev/null && run_rc_script ${file} start fi done @@ -101,9 +119,8 @@ if [ -n "$ENABLED" ]; then for file in $files; do if grep -q ^rcvar $file; then - eval `grep ^name= $file` - eval `grep ^rcvar $file` - if [ -n "$rcvar" ]; then + load_script_vars $file name rcvar + if [ -n "$name" -a -n "$rcvar" ]; then load_rc_config_var ${name} ${rcvar} fi checkyesno $rcvar 2>/dev/null && echo $file