opening: command not found

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo Zusammen,

    um meinen TV per Smartphone einzuschalten, führe ich via SSH folgendes Skript aus

    Das Ein/Ausschalten des TV erfolgt über den cec-client, welcher leider die negative Eigenschaft hat, das die Befehle nicht über SSH ausgeführt werden (warum auch immer). Daher habe ich die entprechenden Befehle in Variablen gepackt, das funktioniert soweit. Nun zu meinem Probelm:

    Führe ich das Skript lokal auf dem Pi aus, bekomme ich immer die Meldung

    Code
    ./tvstatus: line 13: opening: command not found

    und in der Logdatei immer die Meldung

    Code
    Der TV ist aus, schalte das Gerät an...

    Führe ich das Skript vom Smartphon aus, funktioniert zwar das Ein/Ausschalten, aber ich möchte sehr gerne wissen, warum die Fehler auftreten. Hat jemand hierzu eine Idee?

    Danke und Grüsse

  • Hi und Danke für die schnelle Rückmeldung. Habe den cec-client nach dieser Anleitung erstellt. Als Pfad zum cec-client habe ich nun /usr/local/bin genommen, also so

    Code
    STATUS=$(echo pow 0 | /usr/local/bin/cec-client -s -d 1)
    CECOFF=$(echo standby 0 | /usr/local/bin/cec-client -s)
    CECON=$(echo on 0 | /usr/local/bin/cec-client -s)

    Bin mir allerdings nicht sicher ob das der korrekte Pfad ist. Die Ausgabe lokal auf dem Pi bleibt weiterhin

    Code
    ./tvstatus: line 13: opening: command not found

    oder

    Code
    ./tvstatus: line 16: opening: command not found

    je nach Zustand eben.

    Die Ausgabe in der Logdatei jedoch ist nun immer

    Code
    Der TV ist an, schalte das Gerät aus...

    Einmal editiert, zuletzt von PiBorg (15. Dezember 2014 um 13:32)


  • ...

    Code
    Der TV ist an, schalte das Gerät aus...


    warum wundert Dich das?
    Um die Variablen zu setzen wird doch der Code durchlaufen - und zwar in der Reihenfolge, wie er oben steht - und damit die zugehörigen Kommandos ausgeführt.
    Bau das script um und ruf die Kommandos ein/aus im if-/else auf ... dann klappts auch mit dem Schalten ;)

    cu,
    -ds-

  • In welchem Pfad ein Befehl liegt kann man mithilfe des Befehls which oder whereis herausfinden:

    Code
    which cec-client

    Ändern dein Script mal wie folgt ab:

    Allerdings glaub ich sollte man noch ein paar Checks einbauen um Fehler auszuschließen, wenn zB gar kein HDMI Gerät angeschlossen ist usw.

  • @ds, weil ich zugegeben Anfänger bin und es mir nicht so einfach von der Hand geht. Leider verstehe ich auch nicht was ich umbauen soll, ich ruf doch die Kommandos ein/aus im if/else auf?

    meigrafd, danke für den Tipp und die Anpassung des Scripts. Das funktioniert soweit, ABER und genau das ist mein Problem, eben nur lokal auf dem Pi. Sobald ich das Script über ein Widget an meinem Smartphone ausführe, werden die cec-client Kommandos nicht ausgeführt. Dies hat bei meinem Script im Eröffnungspost nur funktioniert nachdem ich sie in Variablen gepackt habe.

    meigrafd, so funktioniert es jetzt wie es soll

    Einmal editiert, zuletzt von PiBorg (15. Dezember 2014 um 15:26)

  • Aha, komisch :s

    Code
    CECoff=$(echo standby 0 | $CECclient -s)
    $CECoff

    Das aufrufen des Rückgabewertes vom Befehl müsste hier aber eigentlich überflüssig sein ;)
    Es sollte also auch so reichen:

    Code
    CECoff=$(echo standby 0 | $CECclient -s)

  • @ds, weil ich zugegeben Anfänger bin und es mir nicht so einfach von der Hand geht.


    nun mach' Dich mal nicht kleiner als Du bist ;) ...



    ... Leider verstehe ich auch nicht was ich umbauen soll, ich ruf doch die Kommandos ein/aus im if/else auf?
    ...

    Code
    ...
    if ...
    CECoff=$(echo standby 0 | $CECclient -s)
            $CECoff
    else
            echo "Der TV ist aus, schalte das Gerät an..." >>$LOGFILE
    CECon=$(echo on 0 | $CECclient -s)
            $CECon
    fi


    Du hast es doch verstanden :) ...
    prima :thumbs1:,
    -ds-


  • Das aufrufen des Rückgabewertes vom Befehl müsste hier aber eigentlich überflüssig sein ;)
    Es sollte also auch so reichen:

    Code
    CECoff=$(echo standby 0 | $CECclient -s)

    Jap, hattest Recht, funktioniert auch ohne das Aufrufen des Rückgabewertes :thumbs1:


    Allerdings glaub ich sollte man noch ein paar Checks einbauen um Fehler auszuschließen, wenn zB gar kein HDMI Gerät angeschlossen ist usw.

    Finde ich eine gute Idee, wie könnte ich das am besten realisieren?


    Du hast es doch verstanden :) ...
    prima :thumbs1:,

    Dank dir, hatte schon einige Zeit mit Probieren und Testen verbracht und war mir unsicher :blush:

    Einmal editiert, zuletzt von PiBorg (15. Dezember 2014 um 19:04)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!