Usando o comando sed in echo para o script bash

0

Gostaria de extrair a última linha do log no BackupPC, portanto, se ocorrer um backup com falha, saberei o porquê pelo email. Eu usei o comando sed para obter a última linha do log. No entanto, estou tendo dificuldades em ecoar na tela. Está mostrando a linha FAILED, mas não a linha de erro do log. Como posso consertar isso e / ou há uma maneira melhor de fazer isso?

#!/bin/bash
# script to send simple email
# Email To ?
EMAIL="[email protected]"
# 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

A saída dos meus emails. Nenhuma linha do arquivo LOG, seja qual for.

ukat2 backup has FAILED
---------------------------------
    
por Marc 23.08.2017 / 17:35

1 resposta

1

echo "$LOG_FILE" | sed -n '$p' não extrai a última linha do arquivo $LOG_FILE , leva a última linha do que é enviado para sua entrada padrão, que é o nome do seu arquivo de log ( /var/lib/backuppc/log/LOG ) que deve aparecer no seu e -mail.

A sintaxe correta seria:

sed -n '$p' "$LOG_FILE"

Ou melhor, como mostrar as N últimas linhas é o trabalho de tail :

tail -n 1 "$LOG_FILE"
    
por 23.08.2017 / 18:03