URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9399
[ Назад ]

Исходное сообщение
"отправка нескольких файлов с помощью uuencode из скрипта"

Отправлено mbb , 02-Мрт-12 09:26 
здравствуйте, подскажите пожалуйста, где у меня ошибка. Задача - отправить несколько *.txt файлов из консоли, грубый пример кода:

a=`ls -l *.txt | awk '{ print $9}' | while read line; do echo $line | sed -e "s%$line%uuencode $line $line;%g" | tr "\n" " "; done`

attach=\($a\)

$attach | mail -s "test" email@mail.ru

получаю сообщение об ошибке:
(uuencode: command not found
нужно как то экранировать скобку, но как, не пойму, если из консоли отправлять командой
(uuencode 1.txt 1.txt; uuencode 2.txt 2.txt; uuencode test.txt test.txt; ) | mail -s "test" email@mail.ru
то все отправляется нормально (


Содержание

Сообщения в этом обсуждении
"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено primus , 02-Мрт-12 18:57 
> здравствуйте, подскажите пожалуйста, где у меня ошибка. Задача - отправить несколько *.txt
> файлов из консоли, грубый пример кода:
> a=`ls -l *.txt | awk '{ print $9}' | while read line;
> do echo $line | sed -e "s%$line%uuencode $line $line;%g" | tr
> "\n" " "; done`
> attach=\($a\)
> $attach | mail -s "test" email@mail.ru

может?
for i in *.txt
do
uuencode "$i" "$i" | mail -s "subj" mail@mail.ru
done


"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено mbb , 05-Мрт-12 07:25 
>[оверквотинг удален]
>> a=`ls -l *.txt | awk '{ print $9}' | while read line;
>> do echo $line | sed -e "s%$line%uuencode $line $line;%g" | tr
>> "\n" " "; done`
>> attach=\($a\)
>> $attach | mail -s "test" email@mail.ru
> может?
> for i in *.txt
> do
> uuencode "$i" "$i" | mail -s "subj" mail@mail.ru
> done

можно и так, но к сожалению, таким образом отправляется несколько писем с одним вложением, а нужно вложить несколько файлов в одно письмо.


"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено LSTemp , 07-Мрт-12 05:53 
> (uuencode 1.txt 1.txt; uuencode 2.txt 2.txt; uuencode test.txt test.txt; ) | mail

а прямо так написать религия не позволяет? не пойму зачем огород городить...

пишите в сабшеле = внутри скобок любую обработку и | mail.

[root@local ~]# cat ccc.bsh
#!/bin/bash
(
for i in 1 2 3
do
  j="j-$i"
  echo $j
done
)|tail -n 2

[root@local ~]# ./ccc.bsh  
j-2
j-3



"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено mbb , 07-Мрт-12 07:01 
>[оверквотинг удален]
> (
> for i in 1 2 3
> do
>   j="j-$i"
>   echo $j
> done
> )|tail -n 2
> [root@local ~]# ./ccc.bsh
> j-2
> j-3

Спасибо за отклик, но таким образом отправится несколько писем с одним вложением. А нужно одно письмо с несколькими вложениями. Для ясности поясню ситуацию - есть 10 серверов, есть набор служб, которые в разных сочетаниях на них крутятся. Есть скрипт, который обрабатывает лог файлы за период, и складывает всю найденную инфу в txt файлики, после чего шлет на мыло. В итоге хочу получить следующее - по одному письму от каждого сервера с приложенными txt. Количество текстовых файликов может изменяться, поэтому и огород ) надеюсь что понятно описал проблему. Можно не запариваться и поставить mutt, но мне такой вариант не подходит, потому что есть машины, на которые mutt поставить не представляется возможным, а uuencode там есть.


"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено LSTemp , 07-Мрт-12 07:04 
>[оверквотинг удален]
>> for i in 1 2 3
>> do
>>   j="j-$i"
>>   echo $j
>> done
>> )|tail -n 2
>> [root@local ~]# ./ccc.bsh
>> j-2
>> j-3
> Спасибо за отклик, но таким образом отправится несколько писем с одним вложением.

вложенные циклы обработки кто-то отменял?

[root@local ~]# cat ccc.bsh
#!/bin/bash
for n in 10 20 30
do
   echo "$n:"
   for i in 1 2 3
   do
     echo "mail $n-$i; "
   done|tail -n 2
done

[root@local ~]# ./ccc.bsh
10:
mail 10-2;
mail 10-3;
20:
mail 20-2;
mail 20-3;
30:
mail 30-2;
mail 30-3;


"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено mbb , 14-Мрт-12 07:40 
>[оверквотинг удален]
> [root@local ~]# ./ccc.bsh
> 10:
> mail 10-2;
> mail 10-3;
> 20:
> mail 20-2;
> mail 20-3;
> 30:
> mail 30-2;
> mail 30-3;

извиняюсь за столь долгую задержку, по вашим примерам только что составил скрипт:

(
for n in *.txt
do
    echo "uuencode $n $n;"
done
)| tr "\n" " " | mail -s "test" emailaddress

получил письмо со строкой
uuencode 1.txt 1.txt; uuencode 2.txt 2.txt; uuencode test.txt test.txt;

такого результата я тоже достигал, главная проблема в том, что эту строку нужно выполнить, а не поместить в письмо (


"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено LSTemp , 07-Мрт-12 08:08 
>[оверквотинг удален]
> "\n" " "; done`
> attach=\($a\)
> $attach | mail -s "test" email@mail.ru
> получаю сообщение об ошибке:
> (uuencode: command not found
> нужно как то экранировать скобку, но как, не пойму, если из консоли
> отправлять командой
> (uuencode 1.txt 1.txt; uuencode 2.txt 2.txt; uuencode test.txt test.txt; ) | mail
> -s "test" email@mail.ru
> то все отправляется нормально (


"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено mbb , 15-Мрт-12 06:41 
в общем проблему решил так:

#!/bin/bash
. config

sendmail="/usr/sbin/sendmail"
boundary='simple boundary'

(cat <<EOF;
To: $ADMINMAIL
From: $HOSTNAME
Subject: test
Content-Type: multipart/mixed; boundary=$boundary

This is a multi-part message in MIME format.
--$boundary
EOF
for name in *.txt
    do
        file=`cat $name`
        echo "Content-Type: application/octet-stream"
        echo "Content-Transfer-Encoding: binary"
        echo "Content-Disposition: attachment; filename="$name""
       echo "$file"
        echo ""
        echo "--$boundary"
done
echo "--$boundary--"
echo ""
) | $sendmail -t -oi

exit 0

осталась только одна проблема, файлы посылаются нормально, за исключением логов oracle :) надо их чем то кодировать, а я в этом пока не разобрался, если есть мысли по этому поводу - буду рад если подскажете


"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено mbb , 15-Мрт-12 09:37 
более конкретное описание проблемы - для кодирование в base64 нужно как то заменить переносы строк, таким образом, что бы base64 их понял... но я пока не знаю как

"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено mbb , 15-Мрт-12 11:51 
ну чтож) пообщаюсь сам с собой, на будущее всем кто столкнется с похожей проблемой.
почти "запилил" скрипт, теперь выглядит так:

#!/bin/bash
. config

sendmail="/usr/sbin/sendmail"
boundary='simple boundary'

(cat <<EOF;
To: $ADMINMAIL
From: $HOSTNAME
Subject: test
Content-Type: multipart/mixed; boundary=$boundary
MIME-Version: 1.0

--$boundary
EOF
for name in *.txt
    do
        sed -i 's/$'"/`echo \\\r`/g" $name    #решает проблему с изменением переносов строк с LF на CRLF
        echo "--$boundary"
        echo "Content-Type: text/plain; name=\"$name\""
        echo "Content-Transfer-Encoding: base64"
        echo "Content-Disposition: attachment; filename=\"$name\""
        echo ""
        base64 $name
        echo ""
done
echo "--$boundary--"
) | $sendmail -t -oi

exit 0

для полного счастья осталось составить правильные заголовки для the bat (что бы аттачи были текстовыми файлами, а не часть.att), результат выложу, может кому интересно будет


"отправка нескольких файлов с помощью uuencode из скрипта"
Отправлено mbb , 15-Мрт-12 06:42 
....