here-document에서 '예기치 않은 파일 끝'오류가 발생합니다.
터미널에서 이메일을 보내려면 스크립트가 필요합니다. 여기와 다른 온라인 사이트에서 본 내용을 기반으로 다음과 같이 형식을 지정했습니다.
/var/mail -s "$SUBJECT" "$EMAIL" << EOF
Here's a line of my message!
And here's another line!
Last line of the message here!
EOF
그러나 이것을 실행하면 다음 경고가 표시됩니다.
myfile.sh: line x: warning: here-document at line y delimited by end-of-file (wanted 'EOF')
myfile.sh: line x+1: syntax error: unexpected end of file
... 여기서 줄 x는 프로그램에서 마지막으로 작성된 코드 줄이고 줄 y는 그 /var/mail
안에 있는 줄입니다 . 나는 대체 해봤 EOF
다른 것들과 ( ENDOFMESSAGE
, FINISH
, 등)하지만 아무 소용. 내가 온라인에서 찾은 거의 모든 것이 이런 식으로 이루어졌고 나는 bash에서 정말 처음이라서 스스로 알아내는 데 어려움을 겪고 있습니다. 누구든지 도움을 줄 수 있습니까?
EOF
토큰은 행의 시작 부분에 있어야합니다, 당신은 함께가는 코드 블록과 함께 그것을 들여 수 없습니다.
쓰면 <<-EOF
들여 쓰기가 가능하지만 Tab공백이 아닌 문자 로 들여 쓰기를해야 합니다. 따라서 코드 블록으로도 끝나지 않을 수도 있습니다.
또한 줄 의 토큰 뒤에 공백이 없는지 확인하십시오 EOF
.
here-doc를 시작하거나 끝나는 줄에는 인쇄 할 수 없거나 공백 문자 (예 : 캐리지 리턴)가있을 수 있습니다. 이는 두 번째 "EOF"가 첫 번째 "EOF"와 일치하지 않고 here-doc를 끝내지 않음을 의미합니다. 그래야합니다. 이것은 매우 일반적인 오류이며 텍스트 편집기만으로는 감지하기 어렵습니다. 예를 들어 다음과 cat
같이 인쇄 할 수없는 문자를 표시 할 수 있습니다 .
cat -A myfile.sh
cat -A
솔루션 의 출력을 확인 하면 문제가되는 문자를 제거하십시오.
다음 전에 선행 공백을 제거하십시오 EOF
.
/var/mail -s "$SUBJECT" "$EMAIL" <<-EOF
ident <tab>
대신 <spaces>
사용하고 <<-EOF를 사용하면 잘 작동합니다.
는 "-"
제거 <tabs>
하지 <spaces>
만, 적어도이 작품을.
이렇게하면이 오류가 발생할 수도 있습니다.
while read line; do
echo $line
done << somefile
이 경우 << somefile
읽어야 하기 때문 < somefile
입니다.
Barmar와 Joni가 언급 한 다른 답변과 함께 .NET을 사용할 때 EOF 앞뒤에 빈 줄을 남겨야하는 경우가 있습니다 <<-EOF
.
참고 URL : https://stackoverflow.com/questions/18660798/here-document-gives-unexpected-end-of-file-error
'development' 카테고리의 다른 글
SCM에서 Maven 프로젝트 확인-커넥터 없음 (0) | 2020.12.07 |
---|---|
NSURL 경로와 absoluteString (0) | 2020.12.07 |
Python 3은 값을 기준으로 dict를 정렬합니다. (0) | 2020.12.07 |
collectstatic을 수행 할 수 없습니다. (0) | 2020.12.07 |
자바에서 UTF-8을 ISO-8859-1로 변환-단일 바이트로 유지하는 방법 (0) | 2020.12.07 |