[bash] retour de chariot

Résolu
enyrix Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   -  
dubcek Messages postés 18789 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

dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
hello
mettre entre "
MSG="$?(tail -n 20 /var/log/apache2/error.log)"
..
echo "$MSG"
1
enyrix Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Salut.
Essai la commande unix2dos, qui si elle n'est pas par défaut doit être dans les paquets officiels.
0
enyrix Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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
enyrix Messages postés 144 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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