Используя команду sed в echo для сценария bash

Я хотел бы извлечь последнюю строку журнала в BackupPC, поэтому, если произойдет сбой резервного копирования, я узнаю причину по электронной почте. Я использовал команду sed , чтобы получить последнюю строку журнала. Однако у меня возникают трудности с отображением этого на экране. Он показывает строку FAILED, но не строку с ошибкой из журнала. Как я могу это исправить и / или есть лучший способ сделать это?

#!/bin/bash
# script to send simple email
# Email To ?
EMAIL="myemail@mydomain.com"
# Email text/message
EMAILMESSAGE="/var/lib/backuppc/emailmessage.txt"
#Extract the last line of the log for error reporting
LOG_FILE="/var/lib/backuppc/log/LOG" 
#Grab the status variables
xferOK=$1
host=$2
type=$3
client=$4
hostIP=$5
share=$6
XferMethod=$7
sshPath=$8
cmdType=$9

# Check if backup succeeded or not.
if [[ $xferOK == 1 ]]; then
        STATUS="has been SUCCESSFUL"

# Email text/message
echo "$client backup $STATUS" > $EMAILMESSAGE
echo "------------------------------------------------------" >>$EMAILMESSAGE
echo "Type: $type" >>$EMAILMESSAGE
echo "Client: $client" >>$EMAILMESSAGE
echo "Host: $host" >>$EMAILMESSAGE
echo "Host IP: $hostIP" >>$EMAILMESSAGE
echo "Share: $share" >>$EMAILMESSAGE
echo "XferMethod: $XferMethod" >>$EMAILMESSAGE
echo "sshPath: $sshPath" >>$EMAILMESSAGE
echo "cmdType: $cmdType" >>$EMAILMESSAGE

/usr/sbin/sendmail "$EMAIL" < $EMAILMESSAGE


else
        STATUS="has FAILED"


#If it had failed, send out the error report
# Email text/message
echo "$client backup $STATUS" > $EMAILMESSAGE
echo "---------------------------------" >>$EMAILMESSAGE
echo "$LOG_FILE" | sed -n '$p' >>$EMAILMESSAGE

/usr/sbin/sendmail "$EMAIL" < $EMAILMESSAGE

Вывод из моих писем. Никакой строчки из файла LOG.

ukat2 backup has FAILED
---------------------------------
0
24.08.2017, 11:11
1 ответ

echo "$LOG_FILE" | sed -n '$p'не извлекает последнюю строку файла $LOG_FILE, она берет последнюю строку того, что отправляется на его стандартный ввод, то есть имя вашего файла журнала ( /var/lib/backuppc/log/LOG), который должен появиться в вашем электронном письме.

Правильный синтаксис будет следующим:

sed -n '$p' "$LOG_FILE"

Или, лучше, так как отображение N последних строк — это работа tail:

tail -n 1 "$LOG_FILE"
1
28.01.2020, 02:45

Теги

Похожие вопросы