Fehlerkanal in Variable umleiten?

D

don_corleone

Hallo,

gibt es eine Möglichkeit den Fehlerkanal eines gerade ausgeführten Befehls im Script in eine Variable umzuleiten und nicht am Bildschirm auszugeben?

In den gefundenen Anleitungen habe ich leider nur Möglichkeiten gefunden, die Fehlermeldungen in eine Datei umzuleiten oder eben auf /dev/null.

Wäre für eure Hilfe sehr dankbar.
 
evtl. erst in eine temp-datei umleiten und dann per echo oder cat in der variable ablegen....nur so als schnelle idee.
 
evtl. erst in eine temp-datei umleiten und dann per echo oder cat in der variable ablegen....nur so als schnelle idee.
Danke für die schnelle Antwort.

So werd ichs wohl vorübergehend auch machen, dachte jedoch, vielleicht weiß jemand, wie man das gleich direkt in eine Variable kriegt?
 
Hallo,

meinst Du sowas (Stderr nach Stdout umleiten)?

Code:
stderr=""; stderr="$(ichproduziereeinenfehler 2>&1)"; echo $stderr
 
Ok, besten Dank!

Gibts auch eine Möglichkeit den Fehlerkanal für alle Befehl im Script generell zu unterdrücken?
 
Danke Xanti,

aber ich rufe in einem Script ein anderes Unterscript auf, in welchem etliche Befehle ausgeführt werden. Ich möchte in diesem Unterscript alle Fehler unterdrücken.

Muss ich da bei jedem einzelnen Befehl "2> /dev/null" anhängen oder gibts da eine bessere, einfachere Mögilchkeit?

Wenn ich "2> /dev/null" beim Aufrufen des Unterscripts anhänge, wird ja nur ein evtl. Fehler, welchen das Unterscript zurückgibt unterdrückt, oder?
 
Muss ich da bei jedem einzelnen Befehl "2> /dev/null" anhängen oder gibts da eine bessere, einfachere Mögilchkeit?

Wie gesagt, wenn Du die Befehle in einer Subshell ausführt, und das macht man mittels (...), dann reicht eine Umleitung. Alternativ kannst Du auch /dev/stderr manipulieren, wovon ich aber stark abraten würde. Fehler sind nicht dazu da Dich zu nerven, sondern um Dich auf einen Misszustand hinzuweisen. Bekämpfe die Ursache, nicht die Wirkung.

Wenn ich "2> /dev/null" beim Aufrufen des Unterscripts anhänge, wird ja nur ein evtl. Fehler, welchen das Unterscript zurückgibt unterdrückt, oder?

Nein.
 
Wie gesagt, wenn Du die Befehle in einer Subshell ausführt, und das macht man mittels (...), dann reicht eine Umleitung.
Wie kann ich mein Unterscript in einer Subshell aufrufen? Oder wie genau meinst du das? Kannst mir bitte etwas auf die Sprünge helfen. Wie müsste der Aufruf des Unterscripts dann im Code aussehen?
 
Dein Unterskript wird automatisch in einer Subshell gestartet. Wenn Du mehrere Befehle in einer Subshell aufrufen willst, musst Du diese in Klammern einschließen. Mehr dazu unter "man bash".
 
Leider funktioniert das ganze bei mir noch immer nicht wie gewollt.

Also ich habe ein Script abc.sh in dem das Unterscript xyz.sh aufgerufen wird:
Code:
echo "Test"
xyz.sh
echo "Test 2"

Das Unterscript xyz.sh sieht folgendermaßen aus:
Code:
mkdir /test1
mkdir /test2

Falls im Unterscript xyz.sh der mkdir Befehl einen Fehler ausgibt, sollte dieser auf keinen Fall ausgegeben werden. Wie lautet dazu der richtige Aufruf des Unterscripts im Hauptscript? "xyz.sh 2> /dev/null" funktioniert leider nicht.

Ich könnte zwar an jeden Befehl im Unterscript "2> /dev/null" anhängen, aber es muss doch auch eine andere Möglichkeit geben, oder?

Ich weiß, dass man Fehler grundsätzlich vermeiden sollte, aber in diesem Fall dürften eben die User nichts von den Fehlern sehen - falls wirklich welche auftreten sollten!

Die 2 Scripts dienen nur zur Veranschaulichung, am System sind diese natürlich viel komplexer.
 
Code:
#!/bin/sh
echo "Test"
xyz.sh > /dev/null 2>&1
echo "Test 2"

Heiko

PS: Welche Shell benutzt Du denn ? Bei mir tuts auch "2> /dev/null" ...
 
Ich weiß, dass man Fehler grundsätzlich vermeiden sollte, aber in diesem Fall dürften eben die User nichts von den Fehlern sehen - falls wirklich welche auftreten sollten!
Das ist klassisch falsch! Manche Fehler kann man eben nicht vermeiden, wichtig ist die Fehler so gut wie möglich abzufangen!
Sag mir mal bitte wie Du das dann mitkriegen willst, dass es beim Erstellen des Verzeichnisses ein Problem gab??? Solang sich kein User meldet und meckert denkst Du einfach alles ist okay? ?(
 
Das ist klassisch falsch! Manche Fehler kann man eben nicht vermeiden, wichtig ist die Fehler so gut wie möglich abzufangen!
Sag mir mal bitte wie Du das dann mitkriegen willst, dass es beim Erstellen des Verzeichnisses ein Problem gab??? Solang sich kein User meldet und meckert denkst Du einfach alles ist okay? ?(
Die Fehler sollen ja vorher schon abgefangen werden, durch andere Abfragen.
Erst wenn alles ok ist, wird zB das Verzeichnis erstellt, falls jedoch trotzdem (warum auch immer) ein Problem dabei auftreten sollte, will ich diesen Fehler einfach nicht sichtbar für den User machen! Ist das so schwer zu verstehen?
Ich kriege dann sehr wohl durch andere Routinen mit, dass Probleme aufgetreten sind.
 

Ähnliche Themen

Verzeichnis mit 1200 Dateien auf Verweise in Textdateien checken

Hilfe für ein shell script

Script pausieren bis Bedingung erfüllt ist

Falsche Ausgabe von $LINENO

Keine grafische Oberfläche (Debian Installation)

Zurück
Oben