설명하다: SSL 인증서 만료에 대해 사용자에게 알리는 데 도움이 되는 작은 스크립트를 가지고 놀고 있습니다. 인증서가 30일 이내에 만료되면 사용자에게 알리고 그렇지 않으면 아무 조치도 취하지 않습니다.
그러나 이상한 이유로 더 큰 상수로 유효성을 검사하면 이메일이 전송되더라도 이런 일이 발생해서는 안 됩니다.
코드는 다음과 같습니다.
#!/bin/ksh
legend="The next certificate almost expires.\n URL: url.com "
count=30
daysleft=$(./ssl-cert-check -d /etc/ssl/certs/cert.cer | awk '{print $6}' | tail -n 1);
#daysleft=50 #Constant to do some test
sendnot=$(echo $legend | mail -s "url.com SSL cert Expiration" [email protected] < <(./ssl-cert-check -d /etc/ssl/certs/cert.cer))
if [[ $daysleft -lt $count ]];
then
echo "Sending note"
echo $sendnot
else
echo "Doing nothing..."
fi
상수를 사용하여 테스트하면 daysleft
작동한다고 선언되지만 그래도 주석은 사용자에게 전송됩니다.
편집하다: 산출:
./ssl-cert-check -d /etc/ssl/certs/cert.cer | awk '{print $6}' | tail -n 1
is 9
질문이나 의견이 있으시면 참석할 준비가 되어 있습니다. 인사! !
답변1
이 줄은:
sendnot=$(echo ... | mail ... < <(./ssl-cert-check ...))
달리다command 를 실행 echo
하고 mail
바로 ./ssl-cert-check
거기에서 의 출력인 전체 배치의 출력을 캡처하여 mail
변수에 할당합니다 sendnot
. 이것이 바로 귀하가 다음과 관계없이 전송된 이메일을 받는 이유입니다.만약에-성명. 또한 mail
여기에는 출력이 많지 않으므로 명령 대체를 사용할 필요가 없어 보입니다.
나중에 사용하기 위해 명령을 저장하려면 함수로 만드세요.
send_notice() {
local subject=$1
echo "some message" | mail -s "$subject"
}
...
if whatever...; then
send_notice "subject line..."
fi
( $1
함수의 첫 번째 매개변수가 됩니다.)
또한 명령에는 또 다른 문제가 있습니다. 파이프와 to 를 모두 사용하고 있으므로 mail
명령의 표준 입력에 두 가지 다른 항목을 연결할 수 없으므로 하나만 적용됩니다. 리디렉션이 여러 개 있는 경우 파이프 및 리디렉션을 사용하면 유효한 마지막 리디렉션이 됩니다.
따라서 귀하의 명령은 실제로 다음과 같습니다.
mail -s ... < <(./ssl-cert-check ...)
즉, echo
실제로 아무것도 하지 않고.
두 명령의 출력을 연결하려면 다음을 수행해야 합니다.
(echo "some message"; ./ssl-cert-check ...) | mail ...