Hallo, wenn ich 2 Prozesse nacheinander ausführen will wenn der erste erfolgreich beendet wurde benutze ich &&. Umgekehrt geht´s mit ||. Wenn ich aber Prozess 2 ausführen will wenn Prozess 1 nicht erfolgreich beendet und Prozess 3 wenn Prozess 1 erfolgreich beendet wurde? Kann man das dann so machen?: Prozess1 || Prozess 2 && exit 1; Prozess 3 Gruß Peter
On Mon, 16 Jul 2001 at 11:30 (+0200), Peter Bossy wrote:
Hallo,
wenn ich 2 Prozesse nacheinander ausführen will wenn der erste erfolgreich beendet wurde benutze ich &&. Umgekehrt geht?s mit ||. Wenn ich aber Prozess 2 ausführen will wenn Prozess 1 nicht erfolgreich beendet und Prozess 3 wenn Prozess 1 erfolgreich beendet wurde? Kann man das dann so machen?:
Prozess1 || Prozess 2 && exit 1; Prozess 3
Prinzipiell scheint es richtig zu sein. Nur warum nicht einfach if Prozess 1 ; then Prozess 3 ; else Prozess 2 ; fi ist für mich irgendwie logischer. Und wenn danach noch was folgt, geht Dein Konstrukt sowieso nicht wegen dem exit 1. Gruß, Bernhard -- "Never do today what you can postpone and do tomorrow." [David Faure, KDE-Entwickler]
On Monday, 16. July 2001 11:40, Bernhard Walle wrote:
On Mon, 16 Jul 2001 at 11:30 (+0200), Peter Bossy wrote:
wenn ich 2 Prozesse nacheinander ausführen will wenn der erste erfolgreich beendet wurde benutze ich &&. Umgekehrt geht?s mit ||. Wenn ich aber Prozess 2 ausführen will wenn Prozess 1 nicht erfolgreich beendet und Prozess 3 wenn Prozess 1 erfolgreich beendet wurde? Kann man das dann so machen?:
Prozess1 || Prozess 2 && exit 1; Prozess 3
Prinzipiell scheint es richtig zu sein. Nur warum nicht einfach
if Prozess 1 ; then Prozess 3 ; else Prozess 2 ; fi ^^^^^^^^^ muß man da nicht auf $? zurückgreifen?
ist für mich irgendwie logischer. Und wenn danach noch was folgt, geht Dein Konstrukt sowieso nicht wegen dem exit 1.
Sorry, hatte nicht erwähnt, daß danach nichts mehr folgen sollte. Danke für alle Lösungen. Gruß Peter
Peter Bossy wrote:
On Monday, 16. July 2001 11:40, Bernhard Walle wrote:
On Mon, 16 Jul 2001 at 11:30 (+0200), Peter Bossy wrote:
wenn ich 2 Prozesse nacheinander ausführen will wenn der erste erfolgreich beendet wurde benutze ich &&. Umgekehrt geht?s mit ||. Wenn ich aber Prozess 2 ausführen will wenn Prozess 1 nicht erfolgreich beendet und Prozess 3 wenn Prozess 1 erfolgreich beendet wurde? Kann man das dann so machen?:
Prozess1 || Prozess 2 && exit 1; Prozess 3
Prinzipiell scheint es richtig zu sein. Nur warum nicht einfach
if Prozess 1 ; then Prozess 3 ; else Prozess 2 ; fi
^^^^^^^^^ muß man da nicht auf $? zurückgreifen?
Nein, wozu? Dort werden die Exit-Statii der einzelnen Prozesse ausgewertet. $? ist lediglich eine Shellvariable, die den Exit-Status des letzten ausgeführten Prozesses beinhaltet (Sofern es die Shell auf die Rolle bekommt, einige Shells haben mit $? Probleme).
ist für mich irgendwie logischer. Und wenn danach noch was folgt, geht Dein Konstrukt sowieso nicht wegen dem exit 1.
Sorry, hatte nicht erwähnt, daß danach nichts mehr folgen sollte.
Hmm? Verstehe nicht was Du meinst. Ralf
On Tuesday, 17. July 2001 10:06, Ralf Corsepius wrote:
Peter Bossy wrote:
On Monday, 16. July 2001 11:40, Bernhard Walle wrote:
On Mon, 16 Jul 2001 at 11:30 (+0200), Peter Bossy wrote:
wenn ich 2 Prozesse nacheinander ausführen will wenn der erste erfolgreich beendet wurde benutze ich &&. Umgekehrt geht?s mit
||. Wenn ich aber Prozess 2 ausführen will wenn Prozess 1 nicht
erfolgreich beendet und Prozess 3 wenn Prozess 1 erfolgreich beendet wurde? Kann man das dann so machen?:
Prozess1 || Prozess 2 && exit 1; Prozess 3
Prinzipiell scheint es richtig zu sein. Nur warum nicht einfach
if Prozess 1 ; then Prozess 3 ; else Prozess 2 ; fi
^^^^^^^^^ muß man da nicht auf $? zurückgreifen?
Nein, wozu? Dort werden die Exit-Statii der einzelnen Prozesse ausgewertet.
$? ist lediglich eine Shellvariable, die den Exit-Status des letzten ausgeführten Prozesses beinhaltet (Sofern es die Shell auf die Rolle bekommt, einige Shells haben mit $? Probleme).
ist für mich irgendwie logischer. Und wenn danach noch was folgt, geht Dein Konstrukt sowieso nicht wegen dem exit 1.
Sorry, hatte nicht erwähnt, daß danach nichts mehr folgen sollte.
Hmm? Verstehe nicht was Du meinst.
Das Ein-Zeilen-Skript kann dort ruhig enden. Kommt nix mehr danach. Gruß peter
Hallo Peter, * Peter Bossy schrieb am 17.Jul.2001:
On Monday, 16. July 2001 11:40, Bernhard Walle wrote:
if Prozess 1 ; then Prozess 3 ; else Prozess 2 ; fi
muß man da nicht auf $? zurückgreifen?
Es wird der Exitstatus des Prozesses ausgewertet [1]. Meist nimmt man als Prozeß test bzw. [ was nur ein anderer Name für test ist [2]. test gibt, von Fehlermeldungen abgesehen, nichts aus, sondern hat nur einen Exitstatus. Also genau das richtige für if. Aber es geht auch jeder andere Befehl. In $? steht der Exitstatus des letzten Befehls. Den könnte man zwar mit test abfragen, aber warum wenn es auch gleich mit dem Befehl selber geht? [1] Richtiger wäre hier Prozeßliste, denn es kann sich hierbei um mehere durch ||, && und ; abgetrennte Befehle oder auch Pipes handeln. [2] Einen Unterschied gibt es aber doch. [ muß zwingend mit ] abgeschlossen werden. Bei test ist ] falsch. Bernd -- Was ist quoten? Quoten ist das Zitieren aus einer mail, der man antwortet. Und wie macht man es richtig? Zitate werden mit "> " gekennzeichnet. Nicht mehr als nötig zitieren. Vor den Abschnitten das Zitat, auf das man sich bezieht, mit einer Zeile Abstand oben und unten. |Zufallssignatur 12
On Monday, 16. July 2001 11:30, Peter Bossy wrote:
Hallo,
wenn ich 2 Prozesse nacheinander ausführen will wenn der erste erfolgreich beendet wurde benutze ich &&. Umgekehrt geht´s mit ||. Wenn ich aber Prozess 2 ausführen will wenn Prozess 1 nicht erfolgreich beendet und Prozess 3 wenn Prozess 1 erfolgreich beendet wurde? Kann man das dann so machen?:
Prozess1 || Prozess 2 && exit 1; Prozess 3
Ich finde Bernhards Variante schöner. Wenn Du bei obenstehendem Konstrukt bleiben willst, probiere doch mal folgendes: $ true && (echo "Prozess 3-1"; echo "Prozess 3-2") \ || (echo "Prozess 2"; exit 1) Prozess 3-1 Prozess 3-2 $ echo $? 0 $ false && (echo "Prozess 3-1"; echo "Prozess 3-2") \ || (echo "Prozess 2"; exit 1) Prozess 2 $ echo $? 1 Gruß, Stephan -- Stephan Hakuli | mailto: stephan@hakuli.de | * GnuPG/PGP-Key * | callto: 01 71 - 651 89 43 | available, please | surfto: http://www.hakuli.de | visit my homepage
On Mon, 16 Jul 2001, Peter Bossy wrote:
wenn ich 2 Prozesse nacheinander ausführen will wenn der erste erfolgreich beendet wurde benutze ich &&. Umgekehrt geht´s mit ||. Wenn ich aber Prozess 2 ausführen will wenn Prozess 1 nicht erfolgreich beendet und Prozess 3 wenn Prozess 1 erfolgreich beendet wurde? Kann man das dann so machen?:
Prozess1 || Prozess 2 && exit 1; Prozess 3
Prozess1 && Prozess3 || Prozess2 $ true && echo 3 || echo 2 3 $ false && echo 3 || echo 2 2 Da true wahr ergibt, wird 3 ausgegeben und da beide zusammen wieder ergfolgreich sind, wird 2 nicht ausgegeben. Da false falsch ergibt, wird 3 uebersprungen und 2 ausgegeben. Falls 3 scheitern kann (was sich mit: $ true && ( echo 3 && false ) || echo 2 3 2 simulieren laesst, Prozess 3 ist der gesamte Befehl in den '()'), du aber in diesem Fall _nicht_ 2 haben willst, solltest du 'if then else fi' verwenden. Noch schwierigere Schachtelungen lassen sich mit {} und () verbrechen, aber da ist dann ein if then else fi Konstrukt wesentlich uebersichtlicher. Zur Veranschaulichung aber noch ein paar Beispiele: $ { false || echo "2"; } && echo 3 2 3 $ { true || echo "2"; } && echo 3 3 $ { true && echo 2; } || echo 3 2 $ { false && echo 2; } || echo 3 3 Der Moeglichkeiten sind viele. -dnh -- Auch wieder richtig, aber zum bloed posten brauch ich kein Hirn. Ausserdem tipp ich schneller, als ich denke :). -- Klaus Muth
participants (6)
-
B.Brodesser@t-online.de
-
Bernhard Walle
-
David Haller
-
Peter Bossy
-
Ralf Corsepius
-
Stephan Hakuli