Re: Quick fun question: only set an rc.d variable sometimes?
Date: Tue, 28 Sep 2021 11:59:42 UTC
On 28/09/2021 05:23, Dan Mahoney (Gushi) wrote: > Hey all, > > I'm dealing with rc.d scripting and reading > https://docs.freebsd.org/en/articles/rc-scripting/ > > Here's my question: Is there a sane way to have something like foo_pid > *completely unset* in one case, but overridable by rc.conf after? > > It took me a bit to wrap my head around the: > > : ${dummy_enable:=no} > : ${dummy_msg="Nothing started."} > > Examples. (Why that first colon, what is this := syntax), etc. The first colon is builtin function same as /bin/true A useful application for : is if you're only interested in using parameter expansions for their side-effects rather than actually passing their result to a command. You can use the parameter expansion as an argument to : : "${var:=$1}" There is as many variants to handle this as many rc scripts are installed on your system. Each have it slightly different (syntax) but with the same meaning: Apache [ -z "$apache24_enable" ] && apache24_enable="NO" [ -z "$apache24limits_enable" ] && apache24limits_enable="NO" [ -z "$apache24limits_args" ] && apache24limits_args="-e -C daemon" [ -z "$apache24_http_accept_enable" ] && apache24_http_accept_enable="NO" [ -z "$apache24_configcheck_disable" ] && apache24_configcheck_disable="NO" Amavisd : ${amavisd_enable:=NO} pidfile=${amavisd_pidfile-"/var/amavis/amavisd.pid"} ISC DHCPD # default name to "dhcpd" if guessing failed # Trailing semicolon also for service(8)'s benefit: name="${name:-dhcpd}" ; name=${name##*/isc-} Some more explanation: To get the assigned value, or default if it's missing: FOO="${VARIABLE:-default}" Or to assign default to VARIABLE at the same time: FOO="${VARIABLE:=default}" Or check the link https://bash.cyberciti.biz/guide/Default_shell_variables_value > What I'm trying to say in rc.subr language is: > > If the user has set something in rc.conf, use it. Otherwise, leave it > TOTALLY UNSET. Not to the null string. Undefined. Easily readable syntax can be like this: [ -n "$kdc_pid" ] && pidfile="$kdc_pid" Variable pidfile will be set to a value of $kdc_pid only if $kdc_pid is set and is not empty. Miroslav Lachman