Wie krieg ich das Script ans Laufen?

  • Hallo,


    ich habe versucht, für meinen VDR ein Startscript aufzubauen. Es soll eine Liste von Plugins aus einer Config-Datei laden und an den VDR übergeben.
    Das funktioniert mit einfachen Plugins auch hervorragend. Nur scheitere ich am Softdevice, weil dieses zusätzliche Parameter braucht.


    Hier mal das Script (Plugin-Liste ist hier der Einfachheit halber mal hart drin):


    Das Problem liegt bei VDRPLUGINS. Beim Aufruf von vdr wirft mit die Bash die double Quotes raus. D.h. VDR erkennt die Parameter nicht nicht mehr als zum softdevice gehörig. Der auskommentierte Aufruf funktioniert übrigens.


    Ich habe nun schon alle möglichen Varianten durch. Aber nichts will laufen. Escapen habe ich auch schon probiert. Also sowas:

    Code
    VDRPLUGINS='-P \"softdevice -ao alsa:pcm=default -vo dfb:\"'


    und sowas:

    Code
    VDRPLUGINS="-P \"softdevice -ao alsa:pcm=default -vo dfb:\""


    In beiden Fällen kommt das hier raus:

    Code
    /usr/bin/vdr -c /etc/vdr -E /var/vdr -d -L /usr/lib/vdr -s /usr/bin/vdrshutdown -P '"softdevice' -ao alsa:pcm=default -vo 'dfb:"'


    Ich muss dazu sagen, ich bin nicht der Bash-Experte. Das meiste ist aus anderen Scripten abgeschaut.
    Jedenfalls komm ich da nicht mehr weiter.
    Wie ist das hinzukriegen?


    Grüße

  • Du könntest den Umweg über ein weiteres Script machen - wenn du da rein echost , wirken auch die backslashes - anschliessend ausführbar machen und ausführen .


    Ist nicht elegant , aber funzt ;)


    HJS

  • Zitat

    Original von HTPC-Schrauber

    Bash
    #!/bin/bash
    
    
    . /etc/rc.conf
    . /etc/rc.d/functions
    VDRPLUGINS='-P "softdevice -ao alsa:pcm=default -vo dfb:"'
    .....
        /usr/bin/vdr -c /etc/vdr -E /var/vdr -d -L /usr/lib/vdr -s /usr/bin/vdrshutdown $VDRPLUGINS


    Ich meine es müsste so funktionieren:

    Code
    VDRPLUGINS="-P'softdevice -ao alsa:pcm=default -vo dfb:'"


    Code
    eval /usr/bin/vdr -c .....


    Gruß,
    Chuck

    1- yavdr 0.5 - DVB-C
    1- VDR-1.7.14 - Xine Pugin - XBMC - DVB-C
    2- Activy 300 mit Gen2VDR V2

    Einmal editiert, zuletzt von vdrchuck ()

  • Hi,


    probier das mal:

    Code
    VDRPLUGINS="-P'softdevice  -ao alsa:pcm=default -vo dfb:' -P'einandersplugin' -P'undnocheins -mit argument'"


    Gruß, Marc

  • Zitat

    Original von HTPC-Schrauber


    Code
    start)
        stat_busy "Starting VDR"
        /usr/bin/vdr -c /etc/vdr -E /var/vdr -d -L /usr/lib/vdr -s /usr/bin/vdrshutdown $VDRPLUGINS
    #    /usr/bin/vdr -c /etc/vdr -E /var/vdr -d -L /usr/lib/vdr -s /usr/bin/vdrshutdown -P "softdevice -ao alsa:pcm=default -vo dfb:"


    Ein Nachteil bei deinem Startscript ist das der VDR sich nicht selber neu startet wenn z.B. der Watchdog zuschlägt oder der VDR aus einem anderen Grund abschmiert.


    Hier mal das Script was bei den VDR Sourcen dabei ist:



    Aber eigentlich kann ich dir nur das runvdr-extreme von Urig empfehlen, benutze ich derzeit auch --> [ANNOUNCE] runvdr extreme 0.2


    Gruß,
    Chuck

    1- yavdr 0.5 - DVB-C
    1- VDR-1.7.14 - Xine Pugin - XBMC - DVB-C
    2- Activy 300 mit Gen2VDR V2

  • Zitat

    Original von HTPC-Schrauber
    ich habe versucht, für meinen VDR ein Startscript aufzubauen. Es soll eine Liste von Plugins aus einer Config-Datei laden und an den VDR übergeben.


    Hab noch n Nachschlag :)


    Code
    p=-Pp_name'"'p_parameter'"'
    echo $p


    ergibt als Ausgabe

    Code
    -Pp_name"p_parameter"


    Sollte dein Prob mit der Bash lösen


    HJS

  • Huch, danke. Das ging ja schnell.
    Ich werd mich heute abend nochmal ran setzen.


    Die Version mit
    VDRPLUGINS="-P'blablabla'" hatte ich schon mal ausprobiert. Ging auch nicht. Ich müßte aber nochmal nachschauen, was da genau raus kam.


    vdrchuck:
    Der Nachteil des fehlenden Restarts ist mir klar.
    Allerdings ist das auch so gewollt. Zumindest bisher ist mir der VDR noch nie so abgeschmiert, das es nötig gewesen wäre.

  • Zitat

    Original von HTPC-Schrauber
    Die Version mit
    VDRPLUGINS="-P'blablabla'" hatte ich schon mal ausprobiert. Ging auch nicht. Ich müßte aber nochmal nachschauen, was da genau raus kam.


    Bei meinem ersten runvdr Script habe ich es genauso gemacht --> allerdings mit dem "eval" vor dem vdr Aufruf.


    Code
    PLUGINS="-Pautotimeredit -Pdvd -Psetup -Pnordlichtsepg -Posdserver"
    PLUGINS="$PLUGINS -P'xine' -P'burn -t /pub/export/burn/tmp -d /pub/export/burn/tmp -i /pub/export/burn -D /dev/dvd'"
    
    
    eval $BINDIR/vdr -u root -g /tmp -L $PLUGINDIR $PLUGINS -v  .........


    Gruß,
    Chuck

    1- yavdr 0.5 - DVB-C
    1- VDR-1.7.14 - Xine Pugin - XBMC - DVB-C
    2- Activy 300 mit Gen2VDR V2

  • Hallo,


    also ich habe jetzt nochmal etliche Varianten durchprobiert.
    Funktionieren mag es aber irgendwie nicht.


    Code
    VDRPLUGINS="-P 'softdevice -ao alsa:pcm=default -vo dfb:'"
    eval /usr/bin/vdr -c /etc/vdr -E /var/vdr -d -L /usr/lib/vdr -s /usr/bin/vdrshutdown.sh $VDRPLUGINS


    ergibt folgendes:

    Code
    ++ VDRPLUGINS='-P '\''softdevice -ao alsa:pcm=default -vo dfb:'\'''
    + eval /usr/bin/vdr -c /etc/vdr -E /var/vdr -d -L /usr/lib/vdr -s /usr/bin/vdrshutdown.sh -P ''\''softdevice' -ao alsa:pcm=default -vo 'dfb:'\'''


    Sehr komisch, was er da macht. Ich versteh es nicht.


    Die resultierende Commandline sieht richtig aus, wenn ich alles hinter eval nochmal in Quotes setze. Dann wird das Kommando aber anscheinend nicht ausgeführt. Jedenfalls passiert dann einfach nichts.


    Die Variante mit dem echoen in eine Datei gefällt mir nicht so wirklich.

  • Also jetzt wirds richtig spaßig:
    Ich habe gerade das runvdr script ausprobiert. Ergebniss: Läuft bei mir auch nicht. Also irgendwas ist mit meiner Bash faul. Ich versteh es nicht mehr.


    Ich hab auch noch versucht, jedes Leerzeichen bei den Parametern einzeln in quotes einzuschließen.
    Das ergibt dann auch folgendes:

    Code
    ++ VDRPLUGINS='-P"softdevice -ao alsa:pcm=default -vo dfb:"'


    Sieht für mich erstmal hervorragend aus. Aber beim VDR-Aufruf wird dann folgendes draus gemacht:

    Code
    + eval /usr/bin/vdr -c /etc/vdr -E /var/vdr -d -L /usr/lib/vdr -s /usr/bin/vdrshutdown.sh '-P"softdevice' -ao alsa:pcm=default -vo 'dfb:"'


    Irgendwie erschließt sich mir nicht, was da abgeht.

  • Haste meine Variante mal probiert ?
    Wenn ich im String Anführungszeichne ( doppelte ) haben will , setz ich die in Einfache - und hab sie im String , siehe mein Beispiel .


    HJS

  • Zitat

    Original von HTPC-Schrauber
    Hi,


    ja, das hatte ich auch getestet. Mit dem Erfolg, das dann noch \ im Ergebniss drin waren. VDR verstand das natürlich auch nicht.


    Hä ?


    Was willste denn auch mit Backslashes , wenn du schon Hochkommas nimmst ?
    Die Backslashes weisen die Bash an , das tatsächliche Zeichen hinter dem Backslash zu nehmen , die Hochkommas weisen die Bash an , exakt den Inhalt zu nehmen - das is doppelt gemoppelt und kann ja auch nich funzen .


    Code
    VDRPLUGINS="-P"'"'"softdevice -ao alsa:pcm=default -vo dfb:"'"'
    echo $VDRPLUGINS


    ergibt

    Code
    -P"softdevice -ao alsa:pcm=default -vo dfb:"


    Das willste haben oder nicht ?


    HJS

  • Du hast mich falsch verstanden:
    Ich habe keine Backslash da rein gemacht. Die hat die Bash nachträglich reingefummelt.


    Mit echo kriege ich übrigens auch immer die richtigen Ausgaben. Nur bei der Ausführung klappts nicht.


    Da auch die Beispielscripte bei mir nicht funktionieren, glaub ich langsam, das es an meiner Bash liegt.
    Ich hab mal nachgeschaut. Mein Archlinux hat Bash 3.2 dabei mit Patches 1 bis 5.
    Es geht bei der Bash aber inzwischen schon bis Patch 15. Ich glaub, ich werd mir heute abend mal ne neue Bash kompilieren.

  • Also ich hab den Vorschlag grad nochmal durchprobiert.


    Mit echo kommt bei mir auch das richtige raus.


    Aber wenn ich das dann in obiges Script einbaue, dann kommt mit -x das hier raus:

  • HTPC-Schrauber


    Habs grad mal mit dem remote probiert - also deine Bash ist wie jede andere auch .


    Bash
    #!/bin/bash
    VDRCMD="vdr -t /dev/tty8 -s /etc/init.d/vdr_pwroff -L /usr/lib/vdr -Pprefermenu -Pdvd -Pdvdswitch -Pfemon -Ptimeline -Pstatus -P"'"'"remote -i /dev/event3"'"'
    echo $VDRCMD >>/tst
    chmod +x /tst
    /./tst


    Der tut


    HJS

  • Hmm, also wahrscheinlich muss ich das dann wirklich über echo in ein Script machen. Ich versteh nur nicht, wieso solche Konstrukte bei anderen laufen. EasyVDR (hab ich auf nem anderen Rechner) verwendet ähnliches. Und das geht. Ich hab nun schon dort abgeschaut. Aber irgendwie komm ich nicht dahinter, wie das geht.
    Ich kann das Script von da aber auch nicht 1:1 übernehmen. Das würde auf dem anderen System nicht laufen, weil da vieles gar nicht drauf ist.


    Dennoch, vielen Dank. Ich werde dann mal versuchen, das mit dem Echo in integrieren.


    Deine Quotes versteh ich aber im Moment nicht so ganz. Kannst Du mal kurz erklären, was da abgeht?
    Nach meinem bisherigen Verständniss fehlt doch da mindestens mal ein Double Quote am Ende.

  • Zitat

    Original von HTPC-Schrauber
    Deine Quotes versteh ich aber im Moment nicht so ganz. Kannst Du mal kurz erklären, was da abgeht?
    Nach meinem bisherigen Verständniss fehlt doch da mindestens mal ein Double Quote am Ende.


    1. Ja
    2. Nö :D


    VDRCMD=
    "vdr -t /dev/tty8 -s /etc/init.d/vdr_pwroff -L /usr/lib/vdr -Pprefermenu -Pdvd -Pdvdswitch -Pfemon -Ptimeline -Pstatus -P"
    '"'
    "remote -i /dev/event3"
    '"'


    So is die Struktur erkennbar ;)


    HJS

  • Äh, ach so. Jetzt kaper ich das.
    D.h. die Bash hängt alles hintereinander und wirft dabei immer die äußeren Quotes weg. Und übrig bleiben nur die Double Quotes, die in einfachen eingeschlossen waren.


    Danke.

  • Zitat

    Original von HTPC-Schrauber
    Äh, ach so. Jetzt kaper ich das.
    D.h. die Bash hängt alles hintereinander und wirft dabei immer die äußeren Quotes weg. Und übrig bleiben nur die Double Quotes, die in einfachen eingeschlossen waren.


    Danke.


    So ähnlich :)


    Die DQ markieren nur Anfang und Ende eines Strings - bei einfachen Strings nicht erforderlich
    Um den DQ ihrne Start/Stop Charakter zu nehmen , setzt man sie in Quotes .


    Was die Bash offensichtlich zu nicht immer nachvollziehbaren Aktivitäten verleitet , sind scheinbare Options"zeichen" im String .
    Du erkennst , daß Quotes eingefügt wurden , wo n - im String war .


    Vielleicht hilft ja im Beispiel den


    "remote -i /dev/event3"


    in


    "remote "
    "-i /dev/event3"


    zu zerlegen oder analog deinen String für softdevice an jedem "-" zu zerlegen .


    HJS

    Working VDR : VDR-1.4.6 - ACPI/NVRAM Wakeup - working on hjslfs

    Einmal editiert, zuletzt von hjs ()

Jetzt mitmachen!

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