Skript Probleme - Funktioniert im Terminal, aber nicht im Aufgabenplaner

Scrati

Benutzer
Mitglied seit
03. Jun 2014
Beiträge
29
Punkte für Reaktionen
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!
 

framp

Benutzer
Mitglied seit
19. Feb 2016
Beiträge
958
Punkte für Reaktionen
100
Punkte
69
Benutze mal /bin/tee statt tee
 

NSFH

Benutzer
Sehr erfahren
Mitglied seit
09. Nov 2016
Beiträge
4.085
Punkte für Reaktionen
566
Punkte
194
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.
 

Scrati

Benutzer
Mitglied seit
03. Jun 2014
Beiträge
29
Punkte für Reaktionen
4
Punkte
3
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?
 

framp

Benutzer
Mitglied seit
19. Feb 2016
Beiträge
958
Punkte für Reaktionen
100
Punkte
69
  • Like
Reaktionen: Scrati

Scrati

Benutzer
Mitglied seit
03. Jun 2014
Beiträge
29
Punkte für Reaktionen
4
Punkte
3
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.
 

synfor

Benutzer
Sehr erfahren
Mitglied seit
22. Dez 2017
Beiträge
9.012
Punkte für Reaktionen
1.613
Punkte
308
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?
 

Scrati

Benutzer
Mitglied seit
03. Jun 2014
Beiträge
29
Punkte für Reaktionen
4
Punkte
3
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)
 


 

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