Verkettung von Pipeline

H

hansen12345

Grünschnabel
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
 
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.
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:
Stimmt, hab die falschen Testszenarien betrachtet. Ich werde mir das ganze heute abend nochmal anschauen.

Gruss, Xanti
 
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
 
Zuletzt bearbeitet:
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
 
Zuletzt bearbeitet:

Ähnliche Themen

Telefoninterview (Wie sich auf Bash-Shell-Fragen vorbereiten?)

Variable automatisch escapen

Wirkliches Includieren mit KSH

while-Bedingung wird nicht (richtig) überprüft?

Compileroptionen

Zurück
Oben