[gelöst] bash-Skript unerwartetes (für mich) Verhalten

  • Hallo liebe Freunde,

    nachdem ich mir nun schon das ein oder andere Skript geschrieben habe um DVD/CD zu rippen, komme ich gerade nicht weiter.

    Was soll das Skript machen?

    Nach der Eingabe eines Suchbegriffes (in den Logs "Der_Tatortreiniger") wird nach dem info File gesucht. Da steht der Episodenname und der Serienname drin. Der Episodenname wird extrahiert.

    Das funktioniert und auch nicht.

    Die grep-Zeilen funktionieren an für sich, die lasse ich schon in anderen Skripten laufen.

    -print0 und -d$'\=' in der Zweiten find-Schleife habe ich nach einer Suche

    https://stackoverflow.com/ques…-returned-by-find#9612232

    eingebaut, Stelle aber keinen Unterschied fest.

    Starte ich das Skript und lasse mir mit echo nur die Pfade ausgeben , dann sieht alles noch in Ordnung aus. Zeile für Zeile werden die Pfade angezeigt.

    Kommentiere ich nun die beiden "grep" Zeilen aus, dann werden mir nicht die erwarteten beiden Zeilen beschnitten und ausgegeben, sondern irgendetwas.

    Die Ausgabe sieht wie folgt aus:

    Bis "Fleischfresser" ist alles so wie erwartet, danach verstehe ich das Ergebnis nicht mehr. Kann mir jemand sagen wo der Fehler ist? Da die richtigen Pfade ohne grep/sed angezeigt werden erwarte ich mit grep/sed auch die richtige Verarbeitung!?

    VDR: ASUS P5DL/EPU, 1x FF TT2.1, 1x Budged Philips Semiconductors SAA7134/SAA7135HL Video Broadcast Decoder, 1x WLAN USB, NVIDIA GT610

    DEBIAN 9.latest e-Tobi amd64, VDR 2.4.0 xineliboutput-sxfe

  • Verschachtelte read-Loops sind etwas tricky... - da muss man pro read einen eigenen File-Descriptor nutzen - also z.B.:

    yaVDR-Dokumentation (Ceterum censeo enchiridia esse lectitanda.)

    Einmal editiert, zuletzt von seahawk1986 ()

  • Versuche es damit:

    - regex für grep auch mit Anker ^ für Zeilenbeginn

    - alle sed Ersetzungen mit 'g' für alle Vorkommen in der Zeile

    Code
    dat_neu_var=$(grep '^S ' "$info_var" | sed 's/^S //; s/ /_/g; s/\//#2F/g; s/"("/\(/g; s/")"/\)/g; s/\:/#3A/g')
    verz_neu_var=$(grep '^T ' "$info_var" | sed 's/^T //; s/ /_/g; s/\//#2F/g; s/"("/\(/g; s/")"/\)/g; s/\:/#3A/g')

    sieht bei mir dann so aus:


    Helmut

    HelmutB passed unfortunately away on July 21, 2022 ... RIP 🖤

  • Herzlichen Dank Euch beiden. Das finden und das füttern der Variablen funktioniert nun schon einmal.

    Bei einem ersten Versuch hatte ich anstelle des "find" einfach eine Variable mit */*/*/info übergeben und das funktionierte wie erwartet und die Versuche auf der Console, mit den Bruchstücken des Codes, funktionierten auch wie erwartet. Nun kann es weiter gehen.

    VDR: ASUS P5DL/EPU, 1x FF TT2.1, 1x Budged Philips Semiconductors SAA7134/SAA7135HL Video Broadcast Decoder, 1x WLAN USB, NVIDIA GT610

    DEBIAN 9.latest e-Tobi amd64, VDR 2.4.0 xineliboutput-sxfe

Jetzt mitmachen!

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