리눅스 heredoc #'cat > text.txt <<EOF' 블럭
누구냐 넌?
heredoc은 쉘 입력창에서 입력값을 실제 파일처럼 사용할 수 있도록 하는 기능이다.
heredoc의 사용법은 한 단어으로 적은후에 엔터를 누르면 입력을 시작할 수 있고, 똑같은 단어를 쓰면 종료가 된다. 보통은 EOF를 많이 쓰지만, nested heredoc을 써야하거나 등 상황에 따라 vim_setting 등 사용자가 임의로 설정한 단어로 heredoc의 시작 및 끝을 나타내는 n개의 heredoc을 만들 수 있다.
언제 유용하게 쓰일까?
가장 유용하게 쓰일때는 vi, nano와 같은 에디터 접속없이 파일을 저장하지 않고 입력값으로 바로 실행할 수 있게 할 수 있다는 점이다. xxd, docker image build, kubectl run 등의 명령어를 실행할 때, 쉘 명령어 입력창에서 입력한 내용을 파일저장없이 실행할 수 있는게 편하다.
쉘의 기본 기능인 'Parameter Substitution' 문제 해결하기
heredoc을 자주 쓰는 경우는 cat 명령어로 파일을 저장할 때이다. 다만 heredoc은 쉘 명령어 입력창에서 파일 내용을 작성하다보니, '$변수명'을 사용하면 자동으로 치환되어서, 의도치 않은 결과가 나올 때가 있다.
위의 결과처럼 apple, grape는 빈 문자열로 되어있어서 fruits.txt 파일의 내용을 열어보았을 때 빈문자열로 치환이 된다. 이는 쉘 스크립트를 작성할 때 방해의 원인이 될 수 있다. 그렇다면 어떻게 해결해야할까? 방법은 2가지가 있다.
1) escape 문자 사용
2) single-quote
참고문서
https://en.wikipedia.org/wiki/Here_document
https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/