syntax error: unexpected end of file
다음 프로그램을 실행할 때 이 문제가 발생했습니다.
#! /bin/bash
# Program to output a system information
TITLE="System Information Report For $HOSTNAME"
CURRENT_TIME="$(date +"%x %r %Z")"
TIMESTAMP="Generated $CURRENT_TIME, by $USER"
report_uptime () {
cat <<- _EOF_
<h2>System Uptime</h2>
<pre>$(uptime)</pre>
_EOF_
return
}
report_disk_space () {
cat <<- _EOF_
<h2>Disk Space Utilization</h2>
<pre>$(df -h)</pre>
_EOF_
return
}
report_home_space () {
cat <<- _EOF_
<h2>Home Space Utilization</h2>
<pre>$(du -sh ~/home/*)</pre>
_EOF_
return
}
cat << _EOF_
<HTML>
<HEAD>
<TITLE>$TITLE</TITLE>
</HEAD>
<BODY>
<h1>$TITLE</h1>
<p>$TIMESTAMP</p>
$(report_uptime)
$(report_disk_space)
$(report_home_space)
</BODY>
</HTML>
_EOF_
cat << _EOF
별도의 장치에서 디버깅했는데 전체 시간 동안 오류가 없었습니다.
me at me in ~/desktop
$ cat << _EOF_
→ <HTML>
→ <HEAD>
→ <TITLE>$TITLE</TITLE>
→ </HEAD>
→ <BODY>
→ <h1>$TITLE</h1>
→ <p>$TIMESTAMP</p>
→ $(report_uptime)
→ $(report_disk_space)
→ $(report_home_space)
→ </BODY>
→ </HTML>
→ _EOF_
<HTML>
<HEAD>
<TITLE>System Information Report For Max-2018.local</TITLE>
</HEAD>
<BODY>
<h1>System Information Report For Max-2018.local</h1>
<p>Generated 04/01/2018 02:46:34 PM CST, by me</p>
</BODY>
</HTML>
또한 쉘 함수에서 모든 명령을 제거해도 오류가 없습니다.
어떤 오류가 있을 수 있나요?
답변1
<<- EOF
연산자를 사용 하는 경우 EOF
구분 기호 앞에 탭 문자가 와야 합니다.오직(또는 줄의 시작 부분에) 공백 대신. 구분 기호 로 구성되거나 <space>EOF
처리 <space><TAB>EOF
되지 않는 줄입니다.
존재하다:
... <<- EOF
<TAB>line1
<TAB>line2\
<TAB>continued
<TAB>line3
<TAB>EOF
<TAB>
선행 TAB(위에 표시됨 )은 조회 전에 제거됩니다( 수정 전의 이전 버전을 제외하고 line2
다음 물리적 줄에서 계속되는 논리적 줄은 제외).zsh
EOF
_EOF_
따라서 여기서 구분 기호 앞의 모든 공백 문자를 제거해야 합니다 . 아니면 더 나은 방법은 <<-
이것을 완전히 피하고 다음을 사용하여 _EOF_
줄의 시작 부분에 두는 것입니다.이미 팔로우 중공백으로). 개인적으로 저는 공백의 수에 따라 구문이 달라지는 언어라는 아이디어를 좋아하지 않으며, python
그것이 제가 가장 좋아하지 않는 것입니다.