In article <[EMAIL PROTECTED]>, Martin Schulze <[EMAIL PROTECTED]> wrote: >In /etc/* there are severeal scripts that are named *.sh. Most of >them are not marked executable and don't contain a "#! /bin/sh" line. > >Thus, to run them you need to "sh foo.sh" or "source foo.sh" them. >This raises a problem if the script contains code like "test -x foo || >exit 0". This would cause the executing shell to be terminated if it >uses source to run the script.
I would like to mention the following: - I introduced this since this is what Solaris does and I blindly copied the whole /etc/rcS.d setup from Solaris, including the "source .sh scripts" convention - It speeds up the boot process, Debian boots slow enough as it is at the moment. > a) Scripts in /etc/init.d, /etc/rc.boot and similar directories that > have the ".sh" suffix may be run by source'ing them. Thus they > must not contain any `exit' statements. If they need to quit the > script they have to use return instead > > b) All scripts in /etc/init.d, /etc/rc.boot and similar directories > have to be standalone shell scripts. They must have the 'x' flag > turned on and contain a regular command to execute them in the > first line (such as "#! /bin/sh"). They must not be called *.sh. > >A mixture of this does not make sense imho: And is impossible - since return doesn't work in a normal script. Ash doesn't complain about it but bash does: $ sh -c return sh: return: can only `return' from a function or sourced script $ ash -c 'echo hello; return; echo foo' hello Mike. -- "Did I ever tell you about the illusion of free will?" -- Sheriff Lucas Buck, ultimate BOFH.