Deine Frage-Antwort-Community
Frage stellen
    • Meinung des Tages: Sollte die Stromsteuer - trotz knapper Kassen - in Deutschland möglichst sofort für alle Verbraucher gesenkt werden?
    • Bist du lieber brutal ehrlich oder verpackst du die Wahrheit lieber in kleine Notlügen?
    • Labubu: Niedlich oder doch Hässlich?
    • Wie hoch ist der Temperaturunterschied von Schatten zu Sonne?
    • Welchen Traum habt ihr sehr oft geträumt?
    • Welche Titel gehören auf die Liste der 50 bedeutensten Computerspiele?
    • Alle Beiträge
    • Radiokooperation mit Absolut HOT 🔥
    • Meinung des Tages
    • Themenspecial: Polizei (mit BKA-Kriminaldirektor Andy Neumann) 🚓
    • Blickwechsel: Deine Fragen an einen Hiphop-Newcomer
    • Ask Me Anything:
      Alle Blickwechsel
    • Ask Me Anything:
      Alle Themenspecials
    • gutefrage Tipps
    • gutefrage Highlights
    • Computer
    • Internet & Social Media
    • Kreativität, Freizeit & Hobby
    • Lokales, Reiseziele & Urlaub
    • Medien, Unterhaltung & Musik
    • Mode & Beauty
    • Software & Apps
    • Spiele & Gaming
    • Sport & Fitness
    • Alle Themenwelten
In wenigen Minuten
Antworten auf Deine Fragen.
Frage stellen
Du hast noch kein gutefrage Profil? Jetzt kostenlos erstellen
Profil Beiträge Antworten Antworten

verreisterNutzer

31.10.2022
Übersicht
1
Hilf. Antw.
1
Antwort
0
Beiträge
0
Danke
0
Komplim.
0
Freunde
frage416
31.10.2022, 10:59
Bash Logik Operatoren kombinieren?

Hallo,

ich habe das folgende Problem. Ich möchte in einem Bash Script einen Befehl ausführen und wenn dieser fehlschlägt eine Nachricht ausgeben und das Script beenden. Gedacht war das also so:

systemctl status service || echo "Fehler" && exit 1

Allerdings dieser Ausdruck das Programm in jedem Fall. Wenn ich Klammern verwende, wird zwar die Nachricht ausgegeben, das Script aber nicht beendet.

systemctl status service || (echo "Fehler" && exit 1)

Wie muss man denn hier vorgehen, damit das gewünschte Ergebnis erzielt wird?

...zum Beitrag
Hilfreichste Antwort
von verreisterNutzer
31.10.2022, 12:21

Warum beendet

(echo "Fehler" && exit 1)

dein Skript nicht?

Mit "(" und ")" startest Du eine neue Subshell und das "exit 1" beendet diese Subshell. Einfacher Test: Öffne eine Terminal und schreibe einmal

echo "Fehler" && exit 1

und einmal

(echo "Fehler" && exit 1)

in die Kommandozeile. Im ersten Fall beendet sich das aufrufende Programm und Dein Terminal geht zu. Im zweiten Fall siehst Du nur die Ausgabe "Fehler" aber Dein Terminalprogramm bleibt offen.

Ich würde das völlig anders machen:

errhandler()
{ 
   echo "Fehler"   
   exit 1 
} 
systemctl status service || errhandler 
...zur Antwort
gutefrage
  • Beitrag erstellen
  • Stöbern
  • Alle Themen
  • Hilfe / FAQ
  • Richtlinien
  • gutefrage Highlights
Partner
  • Businesspartner
  • Partner werden
Unternehmen
  • Über uns
  • Jobs
  • Kontakt
  • Presse
Rechtliches
  • Impressum
  • Datenschutz
  • AGB
  • Utiq verwalten
Weil es immer jemand weiß.
gutefrage ist so vielseitig wie keine andere Frage-Antwort-Plattform. Bei uns findest Du schnell neue Perspektiven - egal zu welchem Thema.
Gmacht in Minga. Mit
❤
Facebook Pixel