Bug#822753: /lib/init/init-d-script: exit 0 at end of script prevents all other exit codes
Dmitry Bogatov
KAction at debian.org
Wed Nov 21 14:02:15 GMT 2018
[2018-11-20 10:15] Jonathan de Boyne Pollard <J.deBoynePollard-newsgroups at NTLWorld.COM>
>
> part text/plain 1073
> Dmitry Bogatov:
>
> > Can you please elaborate, what exactly would break?
>
> Look at the way that the init-d-script script is used. It isn't used as
> the interpreter of an rc script. (Your manual needs fixing to show the
> correct way to invoke it, by the way.)
I believe I already wrote in init-d-script(5) correct invocation:
#!/usr/bin/env /lib/init/init-d-script
> It is invoked as:
> > #!/bin/sh
> > if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
> > set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
> > fi
True, many do it this way.
> init-d-script proceeds to source the script that sourced it. Consider
> what happens if its final action is not to exit $?. The shell returns
> to the original rc script, and runs the rest of it *again*. This
> wouldn't be a problem if rc scripts were purely pseudo-declarative, as
> it would just run some variable assignments and function definitions a
> second time. But in reality people are writing rc scripts like these,
> cargo-cult style:
I do not object `exit $?'. But last line of `init-d-script' is `exit 0'.
But thank you for your explanation. Now I agrue to change `exit 0' to
`exit $?'.
More information about the Debian-init-diversity
mailing list