Bashスクリプトのechoコマンドでsedを使用する

Bashスクリプトのechoコマンドでsedを使用する

BackupPCからログの最後の行を抽出したいと思います。これにより、バックアップが失敗した場合に電子メールで理由がわかります。私はこのコマンドを使用してログのsed最後の行を取得しました。しかし、画面に反映するのに問題があります。 FAILED 行は表示されますが、ログにはエラー行は表示されません。この問題をどのように解決できますか?そして/またはより良い方法はありますか?

#!/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

私のメールの結果です。ログファイルに行がありません。

ukat2 backup has FAILED
---------------------------------

ベストアンサー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"

おすすめ記事