warum steht "set -e" in /etc/rc.local?

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
cosmac
Beiträge: 4579
Registriert: 28.03.2005 22:24:30

warum steht "set -e" in /etc/rc.local?

Beitrag von cosmac » 31.10.2008 22:18:08

hi,

auf die Art bricht das Script nach einem Fehler sofort komplett ab. Gerade rc.local ist doch aber ein Script, in dem schon mal mehrere, völlig unabhängige Befehle stehen. Wenn jetzt ein Fehler passiert, ist der Schaden doch viel größer, als ohne "set -e".

Kennt jemand den wahren Grund?
Beware of programmers who carry screwdrivers.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: warum steht "set -e" in /etc/rc.local?

Beitrag von rendegast » 01.11.2008 17:24:16

lenny:
/etc/init.d/rc.local : ruft nur /etc/rc.local auf
/etc/rc.local : 'exit 0'

'set -e' hast Du selbst eingefügt?'
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

cosmac
Beiträge: 4579
Registriert: 28.03.2005 22:24:30

Re: warum steht "set -e" in /etc/rc.local?

Beitrag von cosmac » 01.11.2008 18:52:26

hi,
rendegast hat geschrieben:'set -e' hast Du selbst eingefügt?'
sehr gute Frage, sowas passiert mir durchaus gelegentlich, aber diesmal nicht :D

rc.local wird vom postinst-Script vom Paket initscripts so erzeugt:

Code: Alles auswählen

# Create /etc/rc.local on first time install and when upgrading from
# versions before "2.86.ds1-16"
#
if dpkg --compare-versions "$PREV_VER" lt "2.86.ds1-16"
then
        if [ ! -e /etc/rc.local ]; then
                cat << EOF > /etc/rc.local
#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.

exit 0
EOF
Na gut, statt "set -e" steht das "-e" als Option in der ersten Zeile, aber die Wirkung sollte doch die gleiche sein. Und ja, mir geht's um Lenny. Dein rc.local ist evt. schon älter, es wird ja nicht überschrieben.
Beware of programmers who carry screwdrivers.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: warum steht "set -e" in /etc/rc.local?

Beitrag von rendegast » 01.11.2008 19:06:33

cosmac hat geschrieben:steht das "-e" als Option in der ersten Zeile
Hab ich glatt übersehen.

Nur das hier aus dem changelog.DEBIAN sysvinit|initscripts :
...
sysvinit (2.86.ds1-16) unstable; urgency=low
...
* Add rc.local support to be more compatible with non-Debian
distributions. Patch from Fabio M. Di Nitto via Ubuntu. Modified to
not print messages when VERBOSE=no.
...
bzw.
...
sysvinit (2.86.ds1-6ubuntu19) dapper; urgency=low
* Add /etc/rc.local support.
-- Fabio M. Di Nitto <fabbione@ubuntu.com> Thu, 16 Mar 2006 08:38:02 +0100
...
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

cosmac
Beiträge: 4579
Registriert: 28.03.2005 22:24:30

Re: warum steht "set -e" in /etc/rc.local?

Beitrag von cosmac » 01.11.2008 20:06:53

Danke für die Antworten. Den Abschnitt im Changelog hatte ich auch gesehen, aber das "via Ubuntu" nicht beachtet. Das reicht ja fast als Erklärung, die "Konkurenz" hat ja andere Prioritäten ;)
Beware of programmers who carry screwdrivers.

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: warum steht "set -e" in /etc/rc.local?

Beitrag von rendegast » 01.11.2008 20:51:14

Mit "/bin/sh -e" gibt es aber auch andere Skripte,
udev, module-init-tools, networking, acpid, sysfsutils, ...
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

cosmac
Beiträge: 4579
Registriert: 28.03.2005 22:24:30

Re: warum steht "set -e" in /etc/rc.local?

Beitrag von cosmac » 01.11.2008 21:03:18

na klar, aber dabei hat jedes Script genau eine spezielle Aufgabe. Wenn da gleich am Anfang ein Fehler auftritt, wird der Rest sowieso schiefgehen (wenn der Fehler gezielt behandelt wird, greift "set -e" ja nicht). In rc.local schreibt man ggf. völlig unabhängige Befehle rein, das ist doch ein Unterschied.
Beware of programmers who carry screwdrivers.

Benutzeravatar
armin
Beiträge: 2682
Registriert: 17.03.2005 11:49:14

Re: warum steht "set -e" in /etc/rc.local?

Beitrag von armin » 01.11.2008 21:38:23

Dann häng halt an deinen Kommandos ein "|| true" an, wenn du dir sicher bist, das du einen nagativen Rückgabewert ignorieren willst. Im Allgemeinen ist es halt immer guter Stil mögliche Fehler explizit zu behandeln und ansonsten abzubrechen.
Formerly known as Trigger.
HP 8510p - Debian Sid
Mitglied des Debian-KDE-Teams

Antworten