Verkettung von Pipeline

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von hansen12345, 06.12.2006.

  1. #1 hansen12345, 06.12.2006
    hansen12345

    hansen12345 Grünschnabel

    Dabei seit:
    06.12.2006
    Beiträge:
    7
    Zustimmungen:
    0
    Hallo,
    ich habe eine Frage bezüglich Verkettung von Pipelines.
    Dazu ein Beispiel:
    Code:
    (ls *bla || echo Fehler && exit) | nl
    Wenn die Zeichenkette "bla" nicht in dem Verzeichnis vorkommt wird der befehl "echo Fehler" ausgeführt,
    danach soll die Pipe mit dem Befehl exit abgebrochen werden was aber nicht funktioniert.
    Es wird stattdessen das Wort "Fehler " an den befehl nl weitergeschickt.

    Wie kann man es anstellen das, nach der Ausgabe von "Fehler " die Pipeline beendet wird?

    Eine Frage habe ich noch.
    Wie muss ich es machen, das in der Pipeline statt der Ausgabe "echo Fehler" der text "Fehler" in eine Variable gepackt wird?

    Besten Dank
    hansen
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Xanti, 06.12.2006
    Zuletzt bearbeitet: 06.12.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Mit (...) wird eine Subshell gestartet und damit exit als Befehl zum Beenden dieser Subshell interpretiert. Also einfach die Klammern weglassen:

    Code:
    ls *bla || echo Fehler && exit | nl
    
    Gruss, Xanti

    edit: Bezüglich Deiner zweiten Frage:

    Code:
    ls *bla || var="Fehler" && exit | nl
    
    Dass dies offensichtlich bei Deinem Beispiel (mit (...)) nicht funktionierte, liegt daran, dass in der Subshell erzeugte Variablen ausserhalb dieser Subshell nicht mehr definiert sind.
     
  4. #3 hansen12345, 06.12.2006
    Zuletzt bearbeitet: 06.12.2006
    hansen12345

    hansen12345 Grünschnabel

    Dabei seit:
    06.12.2006
    Beiträge:
    7
    Zustimmungen:
    0
    Code:
    ls *bla || echo Fehler && exit | nl
    
    Vielen Dank für deine Antwort Xanti.
    Folgendes:
    Wenn "bla" nicht vorkommt, funktioniert das nun so wie ich mir das vorgestellt habe.
    Das Problem ist jetzt aber wenn "bla" vorkommt, wird der befehl nl in der Pipe nicht mehr ausgeführt.

    Besten Dank
    hansen
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Stimmt, hab die falschen Testszenarien betrachtet. Ich werde mir das ganze heute abend nochmal anschauen.

    Gruss, Xanti
     
  6. #5 Xanti, 06.12.2006
    Zuletzt bearbeitet: 06.12.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Hab's mir nochmal angeschaut. Mir fällt zu Deinem Ansatz keine Lösung ein (vielleicht eher Wolfgang), aber folgendes würde auch funktionieren:

    Code:
    if [ "$(ls bla*)" ]; then ls bla* | nl; else echo Fehler; fi
    
    Gruss, Xanti
     
  7. #6 Schlaubi_fi.de, 07.12.2006
    Zuletzt bearbeitet: 07.12.2006
    Schlaubi_fi.de

    Schlaubi_fi.de Mac OS X User

    Dabei seit:
    22.12.2004
    Beiträge:
    304
    Zustimmungen:
    0
    Schnellschuss:

    Code:
    user:~> touch huhubla hahabla                      #debug
    user:~> ls *bla >/dev/null 2>&1 &&
    ls *bla | nl || {
        echo Fehler;
        #exit;
    }
    
    Ausgabe:
    1 huhubla
    2 hahabla

    Code:
    user:~> rm *bla                                     #debug
    user:~> ls *bla >/dev/null 2>&1 &&
    ls *bla | nl || {
        echo Fehler;
        #exit;
    }
    
    Ausgabe:
    Fehler
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Verkettung von Pipeline

Die Seite wird geladen...

Verkettung von Pipeline - Ähnliche Themen

  1. Aus pipeline in eine Datei schreiben mit und ohne Zeilenvorschub

    Aus pipeline in eine Datei schreiben mit und ohne Zeilenvorschub: Hallo, also ich filtere mehrmals hintereinander aus einer Datei verschiedene Sachen heraus und schreibe sie dann in eine Datei namens tabelle...
  2. ATI Pipeline Freischaltung auch für Linux?

    ATI Pipeline Freischaltung auch für Linux?: Hallo, ich bins wieder mal... Ihr alle kennt doch bestimmt die Geschichte das man durch manipulierte Treiber manche Modelle von ATI's...