warum funktioniert meine while schleife in bash nicht [gelöst]

  • Hallo


    Habe mir ein paar bashscripte gebastelt die mit gleich ordnerweise VDR-Aufzeichnungen umwandeln z.B. Serien.


    Geht auch soweit alles einwandfrei bis auf eine schleife die er genau nur 1 mal ausführt



    in der jobs Datei sind auch mehrere Zeilen drinnen nur leider bearbeitet er immer nur die erste und bricht dann ab hat jemand ne Ahnung ?

    "Wir kehren unsere miesen Lieder nicht unter dem Teppich, wir spielen sie als Zugabe." Zitat die Ärzte

    Einmal editiert, zuletzt von Kron ()

  • Code
    - cat $_jobs ...
    + tail -f $_jobs ...


    Falls ein Schnippsel in der Schleife sich beendet ($? != 0) wird die Schleife verlassen. (glaube ich zumindest ...)


    LG Ronny

  • Viel Spaß beim Debuggen. ;)


    Ich würde so ran gehen: Erst mal kommt ein echo $line in die Schleife, damit man sieht, wie viele Durchgänge er macht. Und dann werden so lange Teile der Schleife auskommentiert, bis sie entweder durch läuft, oder nur noch das echo in der Schleife steht. So wird sich das Problem sicher eingrenzen lassen.


    Gruß,


    Udo

  • mhhh irgendwie lags an der letzten if anweeisung keine ahnung warum jedenfalls starte ich die schleife jetzt mit

    Code
    JOBS=$(cat $_jobs)
    
    
    for line in $JOBS; do


    damit gehts danke nochmal

    "Wir kehren unsere miesen Lieder nicht unter dem Teppich, wir spielen sie als Zugabe." Zitat die Ärzte

  • Na, das ist aber schon ein Unterschied... deine erste Version liest die Datei zeilenweise, die zweite Version wortweise.


    Ein weiterer Unterschied, den Anfänger hier leicht übersehen: In der ersten Version läuft die Schleife in einer Sub-Shell, und damit gehen alle Variablen aus der Schleife beim Schleifenende verloren. Die zweite Version läuft ohne Sub-Shell, die Variableninhalte bleiben erhalten.


    Gruß,


    Udo

  • Zitat

    Original von Urig
    Ein weiterer Unterschied, den Anfänger hier leicht übersehen: In der ersten Version läuft die Schleife in einer Sub-Shell


    Gilt das immer, wenn aus einer Datei gelesen wird oder liegt das nur an 'cat'?


    Wenn man das so machen würde:

    Code
    while read line; do
        ....
        ....
    done < $_jobs

    bleiben dann alle veränderten Variablen zwischen do und done erhalten oder läuft wieder alles in einer Sub-Shell?


    Gruß
    e9hack

  • Es gilt, wenn du per Pipe, also mit | zwei Programme verbindest: Die müssen dann ja parallel laufen, und damit teilt sich die Shell hier auf. Die Haupt-Shell wartet dann, bis beide Teil-Shells sich beendet haben.


    In deinem Fall ist sicherlich das cat überflüssig. Alternativ gibt es noch den Trick mit <( :

    Code
    while read line ; do
        ...
    done < <(cat file)


    Wichtig: Zwischen den < < ist ein Leerzeichen. Technisch ist das nichts anderes, als eine Pipe, nur halt ohne Sub-Shell. (Und auch hier ist das cat überflüssig.)


    Gruß,


    Udo

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!