Tom Gundersen, 2011-07-10 22:11:
On Sun, Jul 10, 2011 at 6:57 PM, Kurt J. Bosch <kjb-temp-2009@alpenjodel.de> wrote:
Rationale: Instead of ignoring any errors of all commands but the last within a status block it is much better to use trap to catch them and report 'FAIL'. One might for example miss the utmp group which is needed to propperly install /var/run/utmp. This also makes the code a bit more simple and readable.
Note: We enable this explicitely (by calling stat_err_trap) because most daemon scriptlets don't work well with this by now. Moreover we don't use 'set -E' to avoid breaking/complicating [custom/hook] functions.
I think this is too complicated for too little gain, especially if it will not work everywhere and has to be enabled explicitly. We should avoid being too clever I think. If we want to check for more exit statuses we should add more " || stat_fail".
-t
OK here we go: 1st alternative ----------------- functions: stat_done() { printf ... STAT_ERR=0 } stat_fail() { printf ... STAT_ERR=1 } stat_done() { (( STAT_ERR )) && return 0 printf ... } rc.sysinit: stat_busy "Removing Leftover Files" rm -rf /etc/{nologin,shutdownpid} /forcefsck /tmp/* /tmp/.[^.]* /tmp/..?* /var/run/daemons || stat_fail [[ ! -L /var/lock ]] && rm -rf /var/lock/* || stat_fail if [[ ! -L /var/run && -d /var/run ]]; then find /var/run/ \! -type d -delete || stat_fail ln -s /run/daemons /var/run/daemons || stat_fail fi install -Tm 0664 -o root -g utmp <(:) /var/run/utmp || stat_fail # Keep {x,k,g}dm happy with xorg mkdir -m 1777 /tmp/.{X11,ICE}-unix || stat_fail stat_done 2nd alternative ----------------- rc.sysinit: stat_busy "Removing Leftover Files"; e=0 rm -rf /etc/{nologin,shutdownpid} /forcefsck /tmp/* /tmp/.[^.]* /tmp/..?* /var/run/daemons || e=1 [[ ! -L /var/lock ]] && rm -rf /var/lock/* || e=1 if [[ ! -L /var/run && -d /var/run ]]; then find /var/run/ \! -type d -delete || e=1 ln -s /run/daemons /var/run/daemons || e=1 fi install -Tm 0664 -o root -g utmp <(:) /var/run/utmp || e=1 # Keep {x,k,g}dm happy with xorg mkdir -m 1777 /tmp/.{X11,ICE}-unix || e=1 (( e )) && stat_fail || stat_done Both look very ugly and are even more complicated IMHO. I admit this is not really urgent as long as no bug reports arise which would suggest catching more errors. -- Kurt