Autor Thema: "echo willi > Datei.txt" liefert leere Datei  (Gelesen 765 mal)

Offline Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 19705
  • schon mal restore trainiert?
    • Otto's Technik Blog
"echo willi > Datei.txt" liefert leere Datei
« am: 08 März 2019, 12:42:50 »
Ich nehme Bezug auf dieses Post, wollte aber dort nicht den Thread kapern.

Ich habe das nochmal genauso getestet wie Du - auf verschiedenen Raspbian Systemen, es ist mir aber schon früher immer aufgefallen.
Das Kommando "echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday" führt bei mir zwar zu einer Datei /opt/fhem/FHEM/urlaub.holiday, aber die ist leer. Der stdout wird meines Erachtens über ">" nicht  in die Datei gelenkt sondern irgend woanders hin.

Mache ich das Gleiche, aber mit {qx(echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday)} funktioniert das wie gewünscht. Auch mit {system(echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday)} funktioniert das. Mitschnitt Telnet:
PiB>
PiB> "echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday"
PiB> {qx(cat FHEM/urlaub.holiday)}

PiB> {system("echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday")}
-1
PiB> {qx(cat FHEM/urlaub.holiday)}
1 03-09 Urlaub

PiB>

Oder nochmal mit Urlaub:
PiB> set urlaub reload
PiB> l urlaub
Internals:
   CFGFN
   FUUID      5c8244cb-f33f-27f7-37cb-88455a02b0610a86
   HOLIDAYFILE ./FHEM/urlaub.holiday
   NAME       urlaub
   NR         164
   READONLY   0
   STATE      none
   TRIGGERTIME 1552086002.01074
   TYPE       holiday
   READINGS:
     2019-03-08 12:40:15   state           none
     2019-03-08 12:40:15   tomorrow        Urlaub
     2019-03-08 12:40:15   yesterday       none
Attributes:
   room       Test

PiB> "echo 1 `date --date=tomorrow +%m-%d` Urlaub > FHEM/urlaub.holiday"
PiB> set urlaub reload
PiB> l urlaub
Internals:
   CFGFN
   FUUID      5c8244cb-f33f-27f7-37cb-88455a02b0610a86
   HOLIDAYFILE ./FHEM/urlaub.holiday
   NAME       urlaub
   NR         164
   READONLY   0
   STATE      none
   TRIGGERTIME 1552086002.537
   TYPE       holiday
   READINGS:
     2019-03-08 12:40:49   state           none
     2019-03-08 12:40:49   tomorrow        none
     2019-03-08 12:40:49   yesterday       none
Attributes:
   room       Test

PiB>

Was kann da bei mir anders sein als bei Dir? Aber wie gesagt, da kann ich raspbian frisch aus der Tüte nehmen, da ist das auch so.

Gruß Otto
« Letzte Änderung: 08 März 2019, 13:03:34 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7490+7412,WRT1900ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7746
Antw:"echo willi > Datei.txt" liefert leere Datei
« Antwort #1 am: 08 März 2019, 12:58:23 »
Laut Rudi im anderen Thread:
Zitat
- zweitens wird "" auch mit system implementiert, es wird nur '>> $currlogfile 2>&1 &' angehaengt

Da sind also mehrfache Umleitungen ... weiß jetzt nicht, welche Umleitung welche "schlägt"
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

Offline rudolfkoenig

  • Administrator
  • Hero Member
  • *****
  • Beiträge: 24707
Antw:"echo willi > Datei.txt" liefert leere Datei
« Antwort #2 am: 08 März 2019, 13:03:51 »
Evtl. liegt es an dem systemshell, der keine doppelte Umleitung erlaubt?
Auf Ubuntu 14.04 und auf OSX funktioniert es.
Habe eine weile rungespielt, ohne Erkenntnisgewinn.
Wenn jemand mehr weiss, der soll sich bitte melden.

Offline Wernieman

  • Developer
  • Hero Member
  • ****
  • Beiträge: 7746
Antw:"echo willi > Datei.txt" liefert leere Datei
« Antwort #3 am: 08 März 2019, 13:37:14 »
Wenn ich es richtig verstehe wird aus:
echo willi >Datei.txt
vor dem Ausführen:
echo willi >Datei.txt >> $currlogfile 2>&1 &
Da sollte eigentlich die erste Umleitung gewinnen .. komisch ...

Korrektur:
Habe es mal auf der Konsole (ohne FHEM) getestet:
echo willi >Datei.txt >>Datei2.log 2>&1 &Die 2. Umleitung überschreibt die erste. Ist im Nachhinein auch logisch. 1Es wird einfach nur die Ausgabe umgeleitet. Die 2. Überschreibt aber die erste, d.h. der Inhalt landet in der 2. Umleitung.

Wie Rudi schreibt, könnte auch an der Shell liegen, hier ist es eine bash, würde mich jetzt aber seeehr wundern.
(bei einer dash ist es genau so)

Ergänzung:
Danach müsste obiges geschrieben werden mit:
echo willi | tee Datei.txt
Dann sollte eigentlich folgendes rauskommen:
echo willi | tee Datei.txt >>Datei2.log 2>&1 &
Und das funzt ... habe jetzt hier nur kein Testbares FHEM
« Letzte Änderung: 08 März 2019, 13:39:31 von Wernieman »
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html