스크립트가 한 컴퓨터에서는 잘 실행되고 다른 컴퓨터에서는 오류가 발생합니다.

스크립트가 한 컴퓨터에서는 잘 실행되고 다른 컴퓨터에서는 오류가 발생합니다.

여러 컴퓨터에서 다음 스크립트를 실행 중이고 일부 컴퓨터에서는 제대로 실행되고 있었지만 이제는 다른 컴퓨터에서 실행되고 오류가 발생합니다.

스크립트와 오류는 다음과 같습니다.

스크립트:

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하고 완전히 잘못된 것입니다. sedecho 문의 출력 앞에 이메일 헤더를 삽입하는 데 사용됩니다 . 이것은 전혀 의미가 없습니다.

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에 표시되어 있습니까?)에 있다는 사실이 이를 확인시켜 줍니다.

관련 정보