Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Warum Debian? Was muss ich vorher wissen? Wo geht's nach der Installation weiter?
Antworten
Benutzeravatar
martij
Beiträge: 62
Registriert: 03.09.2018 11:48:37
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: CH
Kontaktdaten:

Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von martij » 15.02.2021 11:51:27

Hier der Code:

Code: Alles auswählen

set -e;
chmod +x ./clone_PAHO_MQTT_C.sh;
set -x > /dev/null 2>&1;  # Define script execution output behavior
cd ./Git;

if find "./PAHO_MQTT_C/.git" -mindepth 1 -print -quit 2> /dev/null | grep -q . ||:; then
  cat /dev/null > /dev/null 2>&1;  # !!! PLACEHOLDER !!!

der find-Befehl gibt wohl einen Error-Code ungleich 0 zurück und deshalb bricht es wegen dem "set -e" ab. Wo muss ich nun das "||:" einfügen, damit dort eine ausnahme gemacht wird wenn ein error-Code ungleich 0 zurückgegeben wird? (Andernfalls würde es ja abrrechen bei set -e...)

Besten Dank.
Zuletzt geändert von martij am 22.02.2021 11:53:08, insgesamt 2-mal geändert.
Grüsse, Martin

JTH
Moderator
Beiträge: 1077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird

Beitrag von JTH » 15.02.2021 12:45:44

Mit Verlaub, das ist Käse ;)

martij hat geschrieben: ↑ zum Beitrag ↑
15.02.2021 11:51:27
(Andernfalls würde es ja abrrechen bei set -e...)
Das set -e gilt für die Bedingungen eines if oder elif nicht. Das if will ja gerade prüfen, ob der Exitcode eines Kommandos 0 oder ungleich 0 ist. Wenn ein ungleich 0 in der if-Bedingung zum sofortigen Exit führt, wäre ein if-then-fi bei gesetztem -e nutzlos. (Ganz konkret, siehe help if.)

martij hat geschrieben: ↑ zum Beitrag ↑
15.02.2021 11:51:27
Wo muss ich nun das "||:" einfügen, damit dort eine ausnahme gemacht wird wenn ein error-Code ungleich 0 zurückgegeben wird?
Gleichzeitig ist es unsinnig, in der Bedingung des if ein || : anzuhängen. Damit ist die ganze Bedingung immer wahr und du könntest das if auch weglassen. Das wäre nämlich äquivalent zu diesem:

Code: Alles auswählen

if false || true; then
    echo "Always true."
fi

Falls das nicht nur ein verkürzter Auszug ist: Fehlt einfach das fi am Ende?

Ansonsten: Was passiert denn oder passiert nicht wie erwartet?

Benutzeravatar
martij
Beiträge: 62
Registriert: 03.09.2018 11:48:37
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: CH
Kontaktdaten:

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird

Beitrag von martij » 15.02.2021 12:50:00

Besten Dank.

Habe es nun so gelöst dass oben im Skript nun set +e steht, dafür steht in der 1. Zeile, im if sowie auch im else, "set -e"..
Grüsse, Martin

Benutzeravatar
martij
Beiträge: 62
Registriert: 03.09.2018 11:48:37
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: CH
Kontaktdaten:

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von martij » 15.02.2021 12:50:32

Problem soweit gelöst
Grüsse, Martin

JTH
Moderator
Beiträge: 1077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von JTH » 15.02.2021 22:10:20

Das ist aber mehr ein Verstecken des möglichen Problems – keine Lösung ;)

Benutzeravatar
martij
Beiträge: 62
Registriert: 03.09.2018 11:48:37
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: CH
Kontaktdaten:

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von martij » 16.02.2021 11:41:41

Muss halt wieder mal schnell gehen ("besser vorgestern als morgen"), funktioniert soweit aber... ;-)
Grüsse, Martin

JTH
Moderator
Beiträge: 1077
Registriert: 13.08.2008 17:01:41
Wohnort: Berlin

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von JTH » 16.02.2021 12:14:41

Jaa, die Anforderung kenne ich :|

Benutzeravatar
martij
Beiträge: 62
Registriert: 03.09.2018 11:48:37
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: CH
Kontaktdaten:

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von martij » 26.02.2021 16:08:22

:THX:
Grüsse, Martin

Benutzeravatar
Duessi
Beiträge: 17
Registriert: 10.04.2021 17:42:16

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von Duessi » 18.04.2021 19:44:16

Der || ist ein logisches oder. Ist also einer der Bedingungen rechts und oder links zutreffend, dann führe einen Befehl aus.
In der Regel also weiteren Code für das Zutreffen der gegebenen Möglichkeiten links und oder rechts neben dem Pipe Symbol.
... Pipe (Informatik), ein Datenstrom zwischen zwei Prozessen.

Logische Verknüpfungen also:
Es können mehrere Abfragen mit den Operatoren && (logisches UND)
und || (logisches ODER) verknüpft werden. Diese Operatoren sind nicht zu verwechseln mit den Bit-Operatoren & und | einzeln!

if ( prozentzahl < 0 || prozentzahl > 100 ) {
cout << prozentzahl
<< "liegt nicht im Bereich zwischen 0 und 100 \n";
}

if ...


Greethings ...=)

Benutzeravatar
jmar83
Beiträge: 676
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von jmar83 » 19.04.2021 09:49:34

Vielen Dank!! :-)
Freundliche Grüsse, Jan

Benutzeravatar
Duessi
Beiträge: 17
Registriert: 10.04.2021 17:42:16

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von Duessi » 23.04.2021 12:35:47

Immer gerne =)

reox
Beiträge: 2022
Registriert: 06.06.2006 22:09:47
Lizenz eigener Beiträge: MIT Lizenz
Kontaktdaten:

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von reox » 23.04.2021 15:30:09

Duessi hat geschrieben: ↑ zum Beitrag ↑
18.04.2021 19:44:16
Diese Operatoren sind nicht zu verwechseln mit den Bit-Operatoren & und | einzeln!
Zumal das mit Bash gar nicht geht und dort & und | eine vollkommen andere bedeutung haben...

Benutzeravatar
jmar83
Beiträge: 676
Registriert: 20.06.2013 20:20:15
Wohnort: CH
Kontaktdaten:

Re: Wo `||:` setzen wenn `set -e` im Shell-Script verwendet wird [Gelöst]

Beitrag von jmar83 » 23.04.2021 16:30:15

Klar, vielen Dank!! ;-)
Freundliche Grüsse, Jan

Antworten