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"

관련 정보