[Gelöst] Mit Skript Ausgabe eines anderen Skripts auslesen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
justme2h
Beiträge: 222
Registriert: 01.04.2013 15:04:09

[Gelöst] Mit Skript Ausgabe eines anderen Skripts auslesen

Beitrag von justme2h » 01.12.2017 21:21:30

Hallo zusammen,

hätte da eine Frage. Ich habe ein Skript (a.sh), dass ein paar Aktionen macht und dann am Ende mit echo ausgibt "Success" oder "Failure". Jetzt versuche ich ein zweites Skript zu schreiben (b.sh), welches a.sh aufruft und dann per if weitergeht, je nachdem was a.sh als letztes ausgegeben hat ("Success" oder halt "Failure"). Ich habe leider keine Möglichkeit a.sh zu verändern, also exit x als return Wert kann ich nicht einbauen.

Wie kann ich die Ausgaben eines aufgerufenen Skripts innerhalb eines anderen Skript catchen?

Danke schonmal
justme2h
Zuletzt geändert von justme2h am 03.12.2017 18:53:04, insgesamt 1-mal geändert.

Benutzeravatar
smutbert
Beiträge: 5968
Registriert: 24.07.2011 13:27:39
Wohnort: Graz

Re: Mit Skript Ausgabe eines anderen Skripts auslesen

Beitrag von smutbert » 01.12.2017 21:40:11

Code: Alles auswählen

$(a.sh)
führt a.sh aus und ersetzt das ganze Konstrukt durch die Ausgabe des Befehls, ein Beispiel könnte so aussehen

Code: Alles auswählen

if test "$(a.sh)x" != "Successx"
then
    echo "nix ok"
else
    echo "alles ok"
fi
(das zusätzliche x habe ich für mich aus einem anderen Beispiel übernommen - ich denke das soll gegen Syntaxfehler bei einer leeren Ausgabe helfen)

justme2h
Beiträge: 222
Registriert: 01.04.2013 15:04:09

Re: Mit Skript Ausgabe eines anderen Skripts auslesen

Beitrag von justme2h » 01.12.2017 22:14:36

Danke! Da a.sh mehr Ausgaben macht, bin ich jetzt bei folgendem hängengeblieben:

Code: Alles auswählen

last_line="$(./a.sh | tail -1)x"
if test $last_line != "Successx" 
then
    echo "nix ok"
else
    echo "alles ok"
fi
Funktioniert :-)

Benutzeravatar
Meillo
Moderator
Beiträge: 4699
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Mit Skript Ausgabe eines anderen Skripts auslesen

Beitrag von Meillo » 01.12.2017 22:24:58

Wenn du zwischen Erfolg und Fehler unterscheiden willst, dann tue das anhand des Exitcodes! Beende also in a.sh mit `exit 0' (Success) oder `exit 1' (Failure). In b.sh machst du es dann so:

Code: Alles auswählen

if a.sh >/dev/null; then
    echo okay
else
    echo fehlerhaft
fi
Use ed(1) once in a while!

justme2h
Beiträge: 222
Registriert: 01.04.2013 15:04:09

Re: Mit Skript Ausgabe eines anderen Skripts auslesen

Beitrag von justme2h » 01.12.2017 22:39:47

Danke für den Hinweis. Wie gesagt, ich kann a.sh nicht bearbeiten.

Benutzeravatar
Meillo
Moderator
Beiträge: 4699
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Mit Skript Ausgabe eines anderen Skripts auslesen

Beitrag von Meillo » 01.12.2017 22:59:09

justme2h hat geschrieben: ↑ zum Beitrag ↑
01.12.2017 22:39:47
Danke für den Hinweis. Wie gesagt, ich kann a.sh nicht bearbeiten.
Oh, das habe ich dann ueberlesen.

Der korrekte Weg waere dann, a.sh mit einer Shell-Funktion zu wrappen, damit man einen ordentlichen Rueckgabewert bekommt, z.B. so:

Code: Alles auswählen

a_wrapper() {
    last_line="$(./a.sh | tail -1)"
    test "$last_line" = "Success"
    return $?
}

if a_wrapper; then
[...]
Der Grund, weshalb ich das bei einem grosseren Projekt so machen wuerde, ist der, dass ich versuchen wuerde, meinen Code moeglichst einheitlich und der gewohnten Form entsprechend zu halten. Alles was von aussen an Abweichendem kommt, wuerde ich mittels Wrappern mit dem Kerncode kompatibel machen. So ein Ansatz sorgt fuer Ordnung in einem grosseren Projekt. Bei einem kleinen Script wuerde ich es aber als zu viel Overhead werten.
Use ed(1) once in a while!

justme2h
Beiträge: 222
Registriert: 01.04.2013 15:04:09

Re: Mit Skript Ausgabe eines anderen Skripts auslesen

Beitrag von justme2h » 03.12.2017 18:52:43

Danke. So ein Wrapper ist eine gute Idee :THX:

Antworten