[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. 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
      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. 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