[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
    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
  2. 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. 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
        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. 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
          si c'est le \r qui manque, et comme ca ?
          tail -v -n 20 /var/log/apache2/error.log | sed 's/$/\r/' >&3
          0