development

here-document에서 '예기치 않은 파일 끝'오류가 발생합니다.

big-blog 2020. 12. 7. 20:13
반응형

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

반응형