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
반응형