Index: usr.sbin/service/service.sh =================================================================== --- usr.sbin/service/service.sh +++ usr.sbin/service/service.sh @@ -46,6 +46,21 @@ echo '' } +load_script_vars() { + eval "$( sh -c ' + exec 9<&1 1>&- 2>&- + trap '\''for var in $*; do + eval echo \"\$var=\\\"\$$var\\\"\" >&9 + done'\'' EXIT + set_name() { name="$1"; } + eval "$( awk '\''{ + gsub(/load_rc_config /, "set_name ") + gsub(/run_rc_command /, ": ") + print + }'\'' "$0" )" + ' -- "$@" )" +} + while getopts 'ehlrRv' COMMAND_LINE_ARGUMENT ; do case "${COMMAND_LINE_ARGUMENT}" in e) ENABLED=eopt ;; @@ -69,9 +84,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 +93,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 +114,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