Operation System/Unix & Linux

Linxu 환경에서 EOF 중첩으로 사용하기

junsuyoun 2024. 3. 20. 16:00
728x90
반응형

EOF 기능을 사용하여 스트림 처리 시 중첩을 사용하게 되면 오류를 만나게됩니다. 이에 대한 처리 방법 입니다. 


문제

[root@manager eof]# cat eof.sh 
#!/bin/bash

su - testuser <<EOF

cat <<EOF
aaa
EOF

EOF

[root@manager eof]# sh eof.sh 
Last failed login: Sun Nov  5 06:30:30 UTC 2023 from 95-86-208-198.static.yaroslavl.ru on ssh:notty
There were 20 failed login attempts since the last successful login.
-bash: line 3: warning: here-document at line 2 delimited by end-of-file (wanted `EOF')
aaa
eof.sh: line 9: EOF: command not found

[root@manager eof]# sh -x eof.sh 
+ su - testuser
Last login: Wed Mar 20 06:57:10 UTC 2024
-bash: line 3: warning: here-document at line 2 delimited by end-of-file (wanted `EOF')
aaa
+ EOF
eof.sh: line 9: EOF: command not found
  • EOF를 쉘 스크립트 내에서 중첩으로 사용하는 경우 EOF 기능 사용에 대한 명명을 다르게 해줘야 합니다.
  • 외부 EOF가 수행 되고 내부 EOF가 수행될 때 동일한 EOF 명을 갖고 있어 오류가 발생  

해결

[root@manager eof]# cat eof.sh 
#!/bin/bash

su - testuser <<OUT_EOF

cat <<IN_EOF
aaa
IN_EOF

OUT_EOF
[root@manager eof]# sh eof.sh 
Last login: Wed Mar 20 06:57:13 UTC 2024
aaa
[root@manager eof]# sh -x eof.sh 
+ su - testuser
Last login: Wed Mar 20 06:57:50 UTC 2024
aaa
  • 외부에서 사용한 EOF를 OUT_EOF 내부에서 사용한 EOF를 IN_EOF로 변경하면 오류 해결 
  • EOF는 개념이며, EOF 명명 규칙은 자유롭게 수정 가능하니 EOF 블럭을 구분하여 명명을 맞추면 해결 됩니다. 

 

728x90
반응형