Передача выходных данных из трех операторов echo в mail


echo "Total items: `echo $QUERY1 | awk '{print $1}'`"
echo "Total Error: `echo $QUERY1 | awk '{print $2}'`"
echo "Percentage: $QUERY2"

Как я могу отправить эти три вещи в одном письме, используя mail command. Поэтому тело письма должно быть таким, как показано ниже, когда я получаю любое письмо, в каждой строке должно быть одно Эхо-утверждение -

Total items:-    Some Number
Total Error:-   Some Number
Percentage:-   Some Number

Я бегу SunOS

bash-3.00$ uname -a 
SunOS lvsaishdc3in0001 5.10 Generic_142901-02 i86pc i386 i86pc 
2 8

2 ответа:

Ваше требование не совсем ясно, но попробуйте это

{
    echo "Total items: `echo $QUERY1 | awk '{print $1}'`"
    echo "Total Error: `echo $QUERY1 | awk '{print $2}'`"
    echo "Percentage: $QUERY2"
} | mail -s "subject" toUser1@xyz.com,toUser2@abc.com

Пара { .. } создает группу процессов, и все std-выходные данные перенаправляются в 1 | (канал), который подключается к std-входу вашей почтовой программы.

Возможно, Вам потребуется использовать mailx, -s указывает тему, которую я вижу из вашего другого вопроса на эту тему, который вы, кажется, понимаете.

Также sendmail должен быть запущен и правильно настроен для любой почты, которая будет доставляться с машины. что вы выполняете этот сценарий.

IHTH


Править: 2015-11-07

Только что получил звезду "хороший ответ" за это, и на обзоре я удивлен, что не прокомментировал чрезмерное использование процессов. В этом случае это можно свести к одному вызову awk, т. е.

awk -v q1="$QUERY1" -v q2="$QUERY2" \
 'END {
    split(q1,q1arr)
    print "Total items: " q1arr[1] \
          "Total Error: " q1arr[2] \
          "Percentage: " q2
}' /dev/null \
| mail -s "subject" toUser1@xyz.com,toUser2@abc.com

Или для однолинейной толпы ; -), то есть

awk -v q1="$QUERY1" -v q2="$QUERY2" 'END {split(q1,q1arr);print "Total items: " q1arr[1] "\nTotal Error: " q1arr[2] "\nPercentage: " q2 }' /dev/null | mail -s "subject" toUser1@xyz.com,toUser2@abc.com

{ .. } в этом случае не нужны, так как есть только один процесс, соединяющийся с трубой.

Для случая, подобного при отправке сводного отчета один раз в день исходный код полностью пригоден для использования (но неоптимален). Однако неправильное кодирование приводит к появлению вредных привычек. Вызов 5 процессов, когда одного будет достаточно в цикле, который выполняется 1000 раз в день, будет потреблять вычислительные ресурсы без необходимости.

Наконец, поскольку o. p. не включал никаких выборочных данных, код только слегка протестирован.

Просто создайте функцию в bash и | (pipe) ее для sendmail.

            #!/bin/bash

            echo_statement(){

            echo "Total items: `echo $QUERY1 | awk '{print $1}'`"
            echo "Total Error: `echo $QUERY1 | awk '{print $2}'`"
            echo "Percentage: $QUERY2"

            }
            echo_statement | mail -s "subject" you@yourdomain.com