[bash] retour de chariot

Résolu
Bonjour,
Je programme un courriel qui contiendra le retour d'une commande exécuter sur un serveur. Je stocke dans une variable le retour de ma commande, mais j'aimerais conserver les retours de chariot contenu dans mon fichier log... Comment faire ?

MSG=$?(tail -n 20 /var/log/apache2/error.log)
DATA="Voici le contenu du fichier log:\r\n\r\n$MSG"

6 réponses

  1. Contributeur
    si c'est le \r qui manque, et comme ca ?
    tail -v -n 20 /var/log/apache2/error.log | sed 's/$/\r/' >&3
    0
    1. Résolu! Trouver une solution et améliorer le script grâce à un collègue programmeur !

      #!/bin/bash
      
      
      SUBJECT="Notification du serveur"
      MAILSERVER="relais.xxxx.xx"
      PORT="25"
      MAILFROM="xxxx@xxxx"
      MAILTO="xxxx@xxxx"
      
      #### SEND MAIL via RAW TCP #######
      echo
      echo "Connecting to $MAILSERVER on Port $PORT";
      echo "Please wait ... "
      echo
      exec 3<>/dev/tcp/$MAILSERVER/$PORT
      
      if [ $? -ne 0 ] ; then
              echo
              echo "ERROR: Cannot connect to the Mail Server";
              echo "Please check the servername and/or the port number"
              exit
      else
      
      echo -en "HELO mail.email.com\r\n"  >&3
      echo -en "MAIL FROM:$MAILFROM\r\n" >&3
      echo -en "RCPT TO:$MAILTO\r\n" >&3
      echo -en "DATA\r\n" >&3
      echo -en "Subject: $SUBJECT\r\n\r\n" >&3
      echo -en "Voici le contenu du fichier log:\r\n\r\n" >&3
      tail -v -n 20 /var/log/apache2/error.log | while read line 
      do
      echo -en "$line\r\n" >&3
      done
      echo -en ".\r\n" >&3
      echo -en "QUIT\r\n" >&3
      cat <&3
      
      
      echo
      echo
      echo "Mail sended!"
      echo
      fi
      


      Merci à vous de m'avoir aidé! Pour info unix2dos c'est rendu tofrodos pour ubuntu...
      1
      1. Contributeur
        j'ai modifié cette ligne
        DATA="Voici le contenu du fichier log:\r\n\r\n""$MSG"
        0
        1. Quand je met un echo DATA= echo il y a plus rien dans mon courriel et ça l'affiche que dans la console...
          0
        2. Contributeur
          pas de echo dans DATA=
          0
        3. Non plus! :(
          MSG=$(tail -n 20 /var/log/apache2/error.log)
          DATA="Voici le contenu du fichier log:\r\n\r\n""$MSG"
          0
        4. Contributeur
          en enlevant les >&3, l'affichage est correct ?
          0
        5. pas vraiment.. ça envoie plus le mail ça fait une erreur:
          500 5.5.1 Unknown command "Voici le contenu du fichier log:" specified
          500 5.5.1 Unknown command "" specified


          J'essaye d'autre façon qui ne fonctionne pas lol non plus...
          0
      2. Voici mon code, je sais pas trop comment je pourrais faire un echo dans ce cas:

        #!/bin/bash
        
        MSG="$(tail -n 20 /var/log/apache2/error.log)"
        DATA= echo "Voici le contenu du fichier log:\r\n\r\n$MSG"
        SUBJECT="Notification du serveur"
        MAILSERVER="XXXXXXXX"
        PORT="25"
        MAILFROM="XXXXXXXXX"
        MAILTO="XXXXXXXXXXX"
        
        #### SEND MAIL via RAW TCP #######
        echo
        echo "Connecting to $MAILSERVER on Port $PORT";
        echo "Please wait ... "
        echo
        exec 3<>/dev/tcp/$MAILSERVER/$PORT
        
        if [ $? -ne 0 ] ; then
                echo
                echo "ERROR: Cannot connect to the Mail Server";
                echo "Please check the servername and/or the port number"
                exit
        fi
        
        echo -en "HELO mail.email.com\r\n"  >&3
        echo -en "MAIL FROM:$MAILFROM\r\n" >&3
        echo -en "RCPT TO:$MAILTO\r\n" >&3
        echo -en "DATA\r\n" >&3
        echo -en "Subject: $SUBJECT\r\n\r\n" >&3
        echo -en "$DATA\r\n" >&3
        echo -en ".\r\n" >&3
        echo -en "QUIT\r\n" >&3
        cat <&3
        
        
        echo
        echo
        echo "Mail sended!"
        echo
        
        0
        1. Contributeur
          avec des " ça fonctionne, montre ton code
          $ tail a2  
          aaa aaa  
          bbb b b b  
          ccc ccc  
          $ MSG="$(tail a2)"  
          $ echo $MSG  
          aaa aaa bbb b b b ccc ccc  
          $ echo "$MSG"  
          aaa aaa  
          bbb b b b  
          ccc ccc  
          $ 
          $ DATA="Voici le contenu du fichier log:\r\n\r\n""$MSG" 
          $ echo -e "$DATA" 
          Voici le contenu du fichier log: 
          
          aaa aaa 
          bbb b b b 
          ccc ccc 
          $
          0
          1. Contributeur
            hello
            mettre entre "
            MSG="$?(tail -n 20 /var/log/apache2/error.log)"
            ..
            echo "$MSG"
            1
            1. Ne fonctionne pas, cela met directement la ligne en texte... Moi c'est pour mettre dans un courriel, me retourner le contenu de mon tail dedans en texte .. ça fonctionne mais il ne met pas de retour de chariot pour le contenu du fichier log, il m'envoit le contenu du fichier log tout d'un coup, c'est pas très lisible.. Il n'y aurait pas un autre moyen du genre: commmande < nomdufichieraimporter .... ? Merci pour votre aide précieuse !
              0
            2. Contributeur
              Salut.
              Essai la commande unix2dos, qui si elle n'est pas par défaut doit être dans les paquets officiels.
              0