변수 내용을 명령으로 직접 입력하려고 하면 모호한 리디렉션이 발생합니다.

변수 내용을 명령으로 직접 입력하려고 하면 모호한 리디렉션이 발생합니다.

나는 내가 실행하는 다양한 Node 서버의 http 응답을 테스트한 다음 Nginx에서 502 오류 응답(하나 이상의 서버가 충돌했음을 의미)이 있으면 나에게 이메일을 보내는 스크립트를 작성하려고 합니다.

내 접근 방식은 쉘 스크립트를 작성하여 이를 크론 작업으로 실행하는 것이며, ssmtp를 사용하여 Gmail을 통해 메시지를 보냅니다. 다음은 스니펫입니다.

messageTemplate=`cat /home/sites/mailmsg.txt`
...
email="$messageTemplate One or more sites is down!"
mailCommand=`mail -s [email protected] < $email`

ssmtp 메일 템플릿(받는 사람:, 보낸 사람: 등)의 내용을 문제 없이 가져올 수 있습니다. 나는 이메일 라인이 잘 연결되어 있다고 확신합니다. 문제는 mailCommand 행이 다음 행과 함께 실패한다는 것입니다.

line 31: $email: ambiguous redirect

mail본질적으로 messageTemplate + 사용자 정의 메시지를 첫 번째 명령(이 경우)에 파이프하는 올바른 방법은 무엇입니까?

답변1

내 수정구슬은 귀하의 메시지 텍스트에 다음 <또는 중 하나가 포함될 수 있다고 생각합니다 >.

내가 보기엔 당신의 용도가 맞는 것 같아요

mailCommand=`mail -s [email protected] < $email`

원하는 대로 수행되지 않습니다. 이는 $email파일 이름으로 내용을 취하고( $email몇 단어가 포함되어 있기 때문에 다소 실패함) 해당 내용을 읽으려고 시도하고 해당 내용을 command 에 넣은 mail다음 명령의 출력을 mail다음에 할당합니다. 변수 mailCommand.

내 생각에는 당신이 다음과 같은 것을 원한다는 것입니다

echo "$email" | mail -s [email protected]

즉, 변수에 문자열을 가져와 email메일러에 공급합니까?

(그런데 이제 많은 사람들이 $(foo)역따옴표 대신 명령 대체 표기법을 선호합니다.)

답변2

messageTemplate=`cat /home/sites/mailmsg.txt`
...
mailCommand=`echo "$messageTemplate One or more sites is down"\! | mail -s [email protected]`

또는

email="$messageTemplate One or more sites is down"\!
mailCommand=`echo "$email" | mail -s [email protected]`

관련 정보