PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shellscript: Mittels Fehlerkanal 2> Anwendung starten oder Variable setzen



Sway
10.06.04, 17:18
Hi,

ich bin gerade dabei ein wenig über Shellscripte zu lernen. Nun hänge ich an einer Stelle. Mittels BEFEHL 2> fehlermeldung.txt kann ich den Ausgang in eine Datei weiterleiten. Ist es möglich diesen Fehlerkanal einer anderen Anwendung übergeben, oder noch besser eine Variable im Script setzen... Naja, beides wäre ganz nett.

pibi
11.06.04, 09:06
Vielleicht sagst Du uns etwas genauer, was Du machen willst. Wenn Du zB. nur feststellen willst, ob Dein Programm irgendeinen Fehler produziert hat, kannst Du den Errorlevel abfragen.
programmname ; echo $?

Gruss Pit.

core
11.06.04, 10:06
Wenn ich das richtig verstehe, versuch's mal so:



#!/bin/sh

VAR=$(befehl 2>&1)
if [ $? -ne 0 ]; then
echo 'Returncode ist nicht 0 -> Fehler:'
echo $VAR
fi
Allerdings hast du so auch die Standardausgabe in $VAR mit drin. gesetzt dem Fall "befehl" hat eine Standardausgabe. Das geht bestimmt auch irgendwie, dass man STDOUT verwirft, und nur STDERR abfängt. Fällt mir aber gerade nichts zu ein. :-)

Gruss

pibi
11.06.04, 10:18
Das geht bestimmt auch irgendwie, dass man STDOUT verwirft, und nur STDERR abfängt. Fällt mir aber gerade nichts zu ein. :-)Ganz allgemein: befehl > /dev/null 2>filename

core
11.06.04, 10:48
Ganz allgemein: befehl > /dev/null 2>filename
Das ist klar, nur war ja die Problemstellung STDERR in einer Variable zu speichern.

peschmae
11.06.04, 12:01
Das ist klar, nur war ja die Problemstellung STDERR in einer Variable zu speichern.

Dann halt:


befehl >/dev/null 2>/tmp/filename
VAR=$(cat /tmp/filename)


eine andere Möglichkeit sehe ich nicht, nur den STDERR zu kriegen. Es gibt zwar das naheliegende
2|
aber das leitet nicht den stderr in eine Pipe um sondern dient dazu, den in eine Datei zu schreiben und im Gegensatz zu 2> den "Clobber-Flag" nicht zu beachten.

MfG Peschmä

core
11.06.04, 19:53
Jau.

Sollte man evtl. noch sagen, dass man - insofern man es überhaupt möchte - $? noch vor dem einlesen der temporären Datei auswerten muss, da sonst der Returncode von cat in $? ist.

Gruss

peschmae
12.06.04, 09:06
das hab ich jetzt mal vorausgesetzt ;)

MfG Peschmä