Skript Probleme - Funktioniert im Terminal, aber nicht im Aufgabenplaner

  • Ab sofort steht euch hier im Forum die neue Add-on Verwaltung zur Verfügung – eine zentrale Plattform für alles rund um Erweiterungen und Add-ons für den DSM.

    Damit haben wir einen Ort, an dem Lösungen von Nutzern mit der Community geteilt werden können. Über die Team Funktion können Projekte auch gemeinsam gepflegt werden.

    Was die Add-on Verwaltung kann und wie es funktioniert findet Ihr hier

    Hier geht es zu den Add-ons

Status
Für weitere Antworten geschlossen.

Scrati

Benutzer
Registriert
03. Juni 2014
Beiträge
29
Reaktionspunkte
4
Punkte
3
Hallo zusammen,

ich habe gerade ein Problem, dass ich nicht gelöst bekomme. Ich nutze folgenden Code erfolgreich, wenn ich das Script direkt aus dem Terminal starte:

Code:
#processing command line options
    while getopts qv opt
    do
        case $opt in
            q) exec > $LOG_FILE 2>&1;; #quiet mode, feedback only written to log
            v) exec > >(tee $LOG_FILE) 2>&1;; #split up feedback to shell and log
            #no argument only feedback in shell
        esac
    done

Sobald ich das script in den Aufgabenplaner stecke, bekomme ich per Mail folgende Meldung: "line 6: syntax error near unexpected token". Die Syntax ist da aber meines Erachtens korrekt. Was kann ich tun?

Danke!
 
Benutze mal /bin/tee statt tee
 
wenn das nicht hilft lagere das Script in eine Datei aus und verlinke im Aufgabenplaner zum Speicherort.
Warum weiss ich nicht, aber es gab schon Scripte die nur so funktionierten.
 
Moin,

danke euch, leider keine Änderung :(

/bin/tee brachte keinen Erfolg

Das Skript selbst ist bereits in einer Datei und wird so aufgerufen:
/volume1/docker/docker-compose-update-script.sh -q

Es scheint ja an der Interpretation der Umleitungszeichen zu liegen. Aber warum läufts im Terminal direkt und warum nicht über den Aufgabenplaner?! Weitere Ideen?
 
  • Like
Reaktionen: Scrati
Ich danke dir! Ich habe Tomaten auf den Augen...Irgendwann muss ich die Zeile mal gelöscht haben. Danke!!!

Da es jetzt wie gewünscht funktioniert, werde ich die kommenden Tage, dass Script und docker compose.yml hier ins Forum stellen, um ein wenig Wissen weiterzugeben.
 
Was mich an dem Script irritiert ist folgende Zeile:
v) exec > >(tee $LOG_FILE) 2>&1;; #split up feedback to shell and log
Genauer das: > > und ist das doppelte Semikolon wirklich nötig?
 
Hi,

das doppelte Semikolon ist die case Konvention.

das exec > zeigt die Umleitung der Ausgabe an, das 2&>1 bestimmt die Umleitung von stdout und stderr. das >(tee $log) nennt sich process substitution. Hier wird die gesamte Ausgabe des Scripts an tee übergeben, welches dies als Eingabe liest. (Soweit ich das verstanden habe).

Das ist nicht zu verwechseln mit >> (irgendwas). Denn das hängt ja nur Ausgaben an existierende Daten an. Man müsste das dann aber auch hinter jeder Ausgabe innerhalb des Scripts als Befehl anhängen.

>>(irgendwas) != > >(irgendwas)
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat