Forums Neueste Beiträge
 

grep und der error code

02/07/2015 - 12:43 von Sven Hartge | Report spam
Hallo!

In einem Bash-Script von mir, welches mit "set -e" arbeitet, also die
bash instruiert abzubrechen, sobald ein Kommando einen Return-Code != 0
hat, verwende ich grep.

Ich verwende grep, um aus einer Datei bestimmte Zeilen in eine andere
Datei zu übertragen, wobei es vorkommen kann, dass in der Quell-Datei
keine der gesuchten Zeilen vorkommt. Das ist allerdings kein Fehler
sondern normal.

grep hat allerdings die unschöne Eigenschaft bei einem nicht-matchenden
Ausdruck mit return code 1 zu enden und somit das Script abzubrechen,
obwohl hier von der Semantik des Scripts kein Fehler vorliegt.

Ich habe jetzt die grep man-page hoch und runter gelesen, aber dieses
Verhalten kann ich wohl nicht àndern.

Mein Google-Fu war leider auch nicht stark genug, um mir zu helfen.
(Oder die Temperatur ist aktuell einfach zu hoch.)

Grundsàtzlich gelöst habe ich das Problem jetzt mit "formail", da es
sich bei den Dateien um Mails handelt und ich bestimmte Header
extrahieren will.

Allerdings wàre ich sehr an einer grundsàtzlichen Lösung der
Problemstellung interessiert, a) aus Interesse und b) für die Zukunft,
falls so etwas mal wieder vorkommt und ich kein spezialisiertes Tool für
die Aufgabe zur Hand habe.

Grüße,
Sven.

Sigmentation fault. Core dumped.
 

Lesen sie die antworten

#1 Michael Baeuerle
02/07/2015 - 13:53 | Warnen spam
Sven Hartge wrote:

In einem Bash-Script von mir, welches mit "set -e" arbeitet, also die
bash instruiert abzubrechen, sobald ein Kommando einen Return-Code != 0
hat, verwende ich grep.

Ich verwende grep, um aus einer Datei bestimmte Zeilen in eine andere
Datei zu übertragen, wobei es vorkommen kann, dass in der Quell-Datei
keine der gesuchten Zeilen vorkommt. Das ist allerdings kein Fehler
sondern normal.

grep hat allerdings die unschöne Eigenschaft bei einem nicht-matchenden
Ausdruck mit return code 1 zu enden und somit das Script abzubrechen,
obwohl hier von der Semantik des Scripts kein Fehler vorliegt.
[...]



Man könnte im "Fehler"fall den Exit status prüfen:

| #! /bin/sh
|
| set -e
| grep Bla text.txt || { TMP=$? ; if test $TMP -le 1 ; then true ; else false ; fi ; }
| echo "Ende"

Das bricht nur ab, wenn grep tatsàchlich einen Fehler meldet (oder nicht
gefunden wurde). Bei Status 1 (no match) làuft das Skript weiter.

Ähnliche fragen