Я написал сценарий оболочки, который вычисляет время выполнения самого себя, но проблема, с которой я сталкиваюсь, заключается в том, что он не может отправить разницу во времени по электронной почте. Пожалуйста помоги.
Вот сценарий
#!/bin/bash
start=$(date +%s.%N)
ls /etc > /tmp/x
rm /tmp/x
executiontime(){
end=$(date +%s.%N)
diff=$(echo "$end-$start" | bc)
echo "Inside function $diff"
}
#Email Function
Sender="Sendmail"
Recpt="tarun@example.com"
Sub="Test"
Message="sendmail function $diff"
#Sendmail Function
sendmailfun() {
sendmail -F $Sender -it <<END_MESSAGE
To: $Recpt
Subject: $Sub
$Message
END_MESSAGE
}
executiontime
echo "outside function $diff"
sendmailfun
Когда я запускаю этот сценарий, вывод в строке cmd выглядит следующим образом
root@itpl-lptp-008:/home/incaendo/Downloads# sh executiontest.sh
Inside function .008025182
outside function .008025182
Но письмо, которое я получаю после выполнения вышеприведенный скрипт просто имеет следующую строку
sendmail function
, т.е. без значения $ diff. почему так? Могу ли я отправить разницу во времени по электронной почте?
Оператор
Message="sendmail function $diff"
вычисляется один раз при выполнении сценария. Тогда diff
равно ""
, поэтому Message
равно sendmail function
. Оператор не выполняется повторно после того, как вы установите diff
в новое значение, поэтому sendmail function
- это то, что отправляется по электронной почте.
Не проще ли запустить
time myscript.sh | mail -s "Test" tarun@example.com