[PINGUIN] Meldungen und Verständnisproblem von start-stop-daemon im skeleton
Henning Oschwald
listmail at hoschwald.de
Mi Okt 31 14:43:46 CET 2007
Hi Sebo und Liste,
On Mi, Okt 31 2007, Sebastian Dellit wrote:
> um es irgendwann mal zu lernen, habe ich noch einmal versucht, meine
> Start-Stop-Skripte, welche ich vorehrst ohne start-stop-daemon
> erstellt hatte, nun mit start-stop-daemon zu nutzen.
[...]
> Zum einen, tauchen an mehreren Stellen ...
>
> #
> # Function that starts the daemon/service
> #
> do_start()
> {
> # Return
> # 0 if daemon has been started
> # 1 if daemon was already running
> # 2 if daemon could not be started
> start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
> || return 1
>
> \ in einer Zeile, und || in einer anderen auf. Warum?
Da es in Wirklichkeit eine lange Zeile ist, die aus Gründen der
Lesbarkeit umgebrochen wurde, muß mit dem Backslash der Zeilenumbruch
escaped werden, ansonsten würde nur die erste Zeile ausgeführt..
> Mit \ wird doch das nächste Zeichen so maskiert, dass es von der Shell
> nicht ausgewertet wird.
yep.
> | steht norm. für die Weitergabe der Ausgabe an das Folgende.
_eine_ schon, zwei sind ein logisches "oder".
> Nur
> warum wird hier nichts mit einem \ escaped
Es wird etwas escaped, nämlich der Line Feed (aka Zeilenumbruch).
> und irgendwas an return, was ja eigentlich der Rückgabewert sein
> sollte, weitergegeben. wobei ich vermute, das || nicht das selbe wie |
> ist.
Richtig, || ist das Gegenstück zu &&. Hilft Dir das weiter? *fg*
Nee, im Ernst:
|| bedeutet, daß das nächste Kommando nur ausgeführt wird, wenn das
Vorige einen Rückgabewert >0 zurückgegeben, also einen Fehler gemeldet
hat. In Deinem beschriebenen Fall wird, sofern beim Start etwas schief
läuft, "return 1" aufgerufen, also ein Fehlerwert zurückgegeben.
Im Gegensatz dazu würde && bewirken, daß das folgende Kommando nur
ausgefürt würde, wenn der vorige Aufruf den Rückgabewert =0, also true
zurückgegeben hätte.
Hier mal ein Beispiel, das beide Operatoren benutzt:
$ cd /tmp/test %% ls || echo "Das Verzeichnis gibts nicht."
Jetzt legen wir /tmp/test mal an und führen das obige Kommando nochmal aus:
$ mkdir /tmp/test
$ cd /tmp/test %% ls || echo "Das Verzeichnis gibts nicht."
Alle klarheiten beseitigt? :-)
Neben den beiden eben beschrieben Operatoren gibts übrigens auch noch
das Semikolon, damit werden die verketteten Kommandos auf jeden Fall
ausgeführt, unabhängig vom Rückgabewert des letzten Aufrufs:
$ echo das; echo ist; echo ein; echo Test
HTH
Henning