Zeilenumbruch

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Zeilenumbruch

    hi leute,

    hab ein kleines "problemchen".
    ich lasse mir über einen cronjob eine log-datei per email schicken. die mail kommt auch an, nur die zeilenumbrüche sind weg.

    der fehler kann auch auf der linux-shell reproduziert werden:

    cat logfile.txt -> ausgabe ok, mit zeilenumbrüchen
    echo $(cat logfile.txt) -> ausgabe ohne zeilenumbrüche

    der zweite befehl liest eigentlich nur in eine variable ein, die dann sofort per echo ausgegeben wird.
    ich frage mich nur, wo die zeilenumbrüche bleiben - hat jemand ne idee?

  • #2
    Soll das sowas wie variable Variablen werden? Ich bezweifle, dass Variablennamen Zeilenumbrüche enthalten dürfen. Getestet habe ich das noch nie, kann mir auch nicht vorstellen, wozu man das braucht.

    Kommentar


    • #3
      Hi, das ist eine eigenschaft von echo.
      Man kann für stringliterale einfach
      Code:
      echo $"das ist ein string
      mit zeilenumburch"
      verwenden. Für variablen funktioniert das nicht.
      Du könntest aber beispielsweise den inhalt des commandos
      als array speichern und dann wie mit zeilenumbrüchen später
      in die email schreiben.

      Code:
      captured_file_array=($(cat some-file))

      greets
      Zuletzt geändert von closure; 12.04.2007, 07:54.
      (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

      Kommentar


      • #4
        Ich steh wohl auf dem Schlauch: Wofür braucht man
        Code:
        echo $"das ist ein string
        mit zeilenumburch"
        und was ist der Unterschied zu
        Code:
        echo "das ist ein string
        mit zeilenumburch"
        ?

        Kommentar


        • #5
          Original geschrieben von closure
          Du könntest aber beispielsweise den inhalt des commandos
          als array speichern und dann wie mit zeilenumbrüchen später
          in die email schreiben.
          kannst du mir dazu einen tipp geben? ich bekomm's einfach nicht hin.

          ursprünglich hatte ich:
          Code:
          mail -s "Backup" -r absender@example.org empfaenger@example.org < logfile
          mail kommt an, doch ohne zeilenumbruch

          dann habe ich versucht:
          Code:
          cat logfile | mail -s "Backup" -r absender@example.org empfaenger@example.org
          ergebnis dito

          jetzt habe ich deinen vorschlag verwurstet (ist der passende ausdruck ):
          Code:
          content = ($(cat logfile))
          echo $content | mail -s "Backup" -r absender@example.org empfaenger@example.org
          mail kommt an, aber nur die erste zeile und echo {$content[*]} schickt zwar alles, doch wieder ohne umbruch

          ich wusste garnicht, das so ein kleines problem, so dolle nerven kann

          Original geschrieben von conemorenerd
          Ich steh wohl auf dem Schlauch
          nicht nur du
          ne, ich denke mal, du bist bei php, mein problem befindet sich aber auf der linuxshell (bash)

          [EDIT] ist mir gerade aufgefallen, auf der konsole funktioniert "cat logfile" korrekt (mit zeilenumbrüchen).
          "cat logfile | mail ..." aber nicht, also liegt der fehler doch bei mail, oder?
          Zuletzt geändert von 3DMax; 12.04.2007, 09:58.

          Kommentar


          • #6
            Nein ich bin schon auch "in einer Shell". Ich sehe nur nicht den Mehrwert von content=($(cat logfile)) gegenüber content=`cat logfile`. Genauer gesagt ist mir nicht klar, was das $ bewirken soll. Vielleicht kann mich einer aufklären?

            Kommentar


            • #7
              Original geschrieben von onemorenerd
              Genauer gesagt ist mir nicht klar, was das $ bewirken soll. Vielleicht kann mich einer aufklären?
              ist beides identisch, ob nun content=`cat logfile` oder content=$(cat logfile) - jacke wie hose.

              Kommentar


              • #8
                Hi,

                cat gibt dir das schon zeilenweise aus. Das problem ist dass
                du ja hier mit pipes arbeitest und die lesen den input von cat
                bis zum sogenannten internal file separator oder eben eof.
                Die erhaltenen zeilen werden dann einfach "zusammengeklebt"
                und durch whitespaces getrennt. Deswegen verschwinden die
                newlines.

                Ich musste jetzt auch erstmal nachschauen. Aber die
                magische variable IFS enthält diesen fileseparator.
                Setz die mal auf einen leerstring und es sollte funktionieren.
                Sicherheitshalber vorher den originalen wert zwischenspeichern.

                Code:
                ORIG_IFS=IFS
                IFS=""
                echo $(cat your-file)
                IFS=ORIG_IFS
                Probier das mal und schau ob es zum gewünschten ergebnis führt.

                greets

                [edit]
                @onemorenerd: das verhalten scheint nicht mehr
                aktuell zu sein. Früher konnte man so eben newlines in
                strings erzwingen. Heute geht das auch ohne.
                (((call/cc call/cc) (lambda (x) x)) "Scheme just rocks! and Ruby is magic!")

                Kommentar


                • #9
                  Original geschrieben von closure
                  Probier das mal und schau ob es zum gewünschten ergebnis führt.
                  ja, danke closure - das funktioniert mit echo, nur bei der mail gab es nach wie vor "probleme".

                  so, nachdem ich jetzt mit den nerven am ende bin und 1000 testmails später, muss ich mich jetzt mal als volldau outen (gabs hier nicht mal einen smilie, der mit dem kopf gegen die wand schlägt?):
                  Original geschrieben von MS Outlook
                  Die unnötigen Zeilenumbrüche des Nachrichtentextes wurden automatisch entfernt.
                  nur komisch, dass es bei anderen testmails funktionerte. nunja, jetzt werde ich noch herausfinden, unter welchen gesichtspunkten ol die zeilenumbrüche als "unnötig" einstuft.

                  Kommentar

                  Lädt...
                  X