![Bash 스크립트의 echo 명령에서 sed 사용](https://linux55.com/image/116636/Bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%9D%98%20echo%20%EB%AA%85%EB%A0%B9%EC%97%90%EC%84%9C%20sed%20%EC%82%AC%EC%9A%A9.png)
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"