여러 컴퓨터에서 다음 스크립트를 실행 중이고 일부 컴퓨터에서는 제대로 실행되고 있었지만 이제는 다른 컴퓨터에서 실행되고 오류가 발생합니다.
스크립트와 오류는 다음과 같습니다.
스크립트:
host="$(/bin/hostname)";
qSize="$(/usr/sbin/exim -bpc)";
qLimit="100";
sTo="[email protected]";
sFr="root@"$hostname;
if [ $qSize -ge $qLimit ]; then
echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t
else
echo -e "There are "$qSize "emails in the mail queue"
fi
실수! !
sed: -e expression #1, char 79: unterminated `s' command
오류가 무엇인지 아는 사람이 있습니까?
답변1
귀하의 코드:
echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t
읽는 것이 고통스럽습니다. 더 나쁜 것은 읽을 수 있도록 다시 포맷하더라도 쓸모없는 사용법이 이상 sed
하고 완전히 잘못된 것입니다. sed
echo 문의 출력 앞에 이메일 헤더를 삽입하는 데 사용됩니다 . 이것은 전혀 의미가 없습니다.
sed
간단히 말해서 여기서는 사용할 필요도 없고 sed
여기서도 사용하면 안 된다는 것입니다. 이는 단지 추가적인 복잡성과 오류 가능성을 추가할 뿐입니다.
다음과 같이 하십시오:
sendmail -t <<EOF
From: $sFr
To: $sTo
Subject: *ALERT* - Mail queue on '$host' exceeds limit
There are $qSize emails in the mail queue
EOF
또는 다음과 같습니다:
subject="*ALERT* - Mail queue on '$host' exceeds limit"
message="There are $qSize emails in the mail queue"
echo "$message" | sendmail -f "$sFR" -s "$subject" "$sTO"
심지어 이렇게:
{
echo "From: $sFr"
echo "To: $sTo"
echo "Subject: *ALERT* - Mail queue on '$host' exceeds limit"
echo
echo "There are $qSize emails in the mail queue"
} | sendmail -t
심지어 이것이 더 좋습니다:
echo "From: $sFr
To: $sTo
Subject: *ALERT* - Mail queue on '$host' exceeds limit
There are $qSize emails in the mail queue" | sendmail -t
간단히 말해서, 여러 줄의 텍스트를 다른 프로그램(이 경우)에 파이프로 연결하는 거의 모든 방법이 현재 sendmail
수행 중인 작업보다 낫습니다.
답변2
줄이 두 개 있어요
echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue o
n '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t
한 줄이어야합니다
echo "There are "$qSize "emails in the mail queue" | sed 's/^/To: '"$sTo"'\nSubject: *ALERT* - Mail queue on '"$host"' exceeds limit\nFrom: '"$sFr"'\n\n/' | sendmail -t
즉, 컴퓨터에 복사/붙여넣기하는 방식으로 인해 오류가 발생할 수 있습니다.
문제가 열 79(열 80에 표시되어 있습니까?)에 있다는 사실이 이를 확인시켜 줍니다.