[bash] retour de chariot

Résolu
enyrix Messages postés 167 Statut Membre -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    mettre entre "
    MSG="$?(tail -n 20 /var/log/apache2/error.log)"
    ..
    echo "$MSG"
    1
    1. enyrix Messages postés 167 Statut Membre 8
       
      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. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
       
      Salut.
      Essai la commande unix2dos, qui si elle n'est pas par défaut doit être dans les paquets officiels.
      0
  2. enyrix Messages postés 167 Statut Membre 8
     
    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
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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
  4. enyrix Messages postés 167 Statut Membre 8
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    j'ai modifié cette ligne
    DATA="Voici le contenu du fichier log:\r\n\r\n""$MSG"
    0
    1. enyrix Messages postés 167 Statut Membre 8
       
      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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      pas de echo dans DATA=
      0
    3. enyrix Messages postés 167 Statut Membre 8
       
      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. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      en enlevant les >&3, l'affichage est correct ?
      0
    5. enyrix Messages postés 167 Statut Membre 8
       
      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
  7. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    si c'est le \r qui manque, et comme ca ?
    tail -v -n 20 /var/log/apache2/error.log | sed 's/$/\r/' >&3
    0