🔍 cat << EOF > $temp_script
의 동작 방식
이 구문은 "Here Document" (히어 문서) 라고 불리는 쉘 스크립트에서 여러 줄을 파일에 직접 쓰는 방법이야.
즉, EOF
라는 마커를 기준으로 여러 줄의 내용을 하나의 파일로 저장할 수 있어.
✅ cat << EOF > $temp_script
의 동작 과정
cat << EOF
→cat
명령어를 실행하지만 입력을 직접 제공(Here Document 방식).> $temp_script
→ 출력을$temp_script
라는 파일에 저장.EOF
→ 입력이 끝나는 지점을 명확히 지정.
📌 예제
cat << EOF > script.csh
#!/bin/csh
echo "Hello, this is a test script"
EOF
➡ script.csh
파일이 다음과 같이 생성됨:
#!/bin/csh
echo "Hello, this is a test script"
EOF
(또는 다른 키워드)를 만날 때까지 모든 내용을script.csh
파일에 저장.
✅ cat << EOF
의 주요 특징
여러 줄을 한 번에 파일로 저장 가능
echo "..." >> file
을 반복하지 않아도 됨.- 여러 줄을 한 번에 입력 가능.
쉘 스크립트에서 자동 생성 파일을 만들 때 유용
- 복잡한 명령을 여러 번
echo
로 작성할 필요 없음.
- 복잡한 명령을 여러 번
변수 확장 가능 (
$변수
가 해석됨)set name = "John" cat << EOF > script.csh echo "Hello, $name" EOF
$name
은"John"
으로 변환됨.
변수 확장 없이 문자열 그대로 저장하려면
<< 'EOF'
사용cat << 'EOF' > script.csh echo "Hello, \$name" EOF
\$name
이 그대로 유지됨.
🔍 Indent(들여쓰기) 문제 해결 방법
cat << EOF
안의 내용은 들여쓰기가 불가능한데,
이는 cat
이 입력된 내용을 그대로 처리하기 때문이야.
✔ 해결 방법: sed
를 사용하여 Indent 추가
cat << EOF | sed 's/^/ /' > $temp_script
#!/bin/csh
cd $script_dir
$script_command
if (-e "$script_dir/$log_file") then
set grep_output = \`grep "$success_keyword" "$script_dir/$log_file"\`
if (\$? == 0) then
set success="SUCCESS"
else
set success="FAILURE"
endif
else
set success="FAILURE (Log not found)"
endif
exec csh
EOF
✅ sed 's/^/ /'
을 사용하면 각 줄 앞에 4칸의 Indent(공백) 추가 가능.
🚀 결론
✔ cat << EOF
는 여러 줄을 파일에 저장할 때 강력한 기능을 제공
✔ 쉘 스크립트에서 자동으로 실행할 파일을 만들 때 매우 유용
✔ 변수 확장을 원할 경우 EOF
, 그대로 저장할 경우 'EOF'
사용
✔ Indent 문제는 sed
를 활용하여 해결 가능
'IT > 리눅스' 카테고리의 다른 글
sed 로 # 뒤 문자열 제거하기, 즉 주석 같은 구문 제거 (0) | 2025.02.07 |
---|---|
grep 으로 문자열 검색하기 (0) | 2025.01.22 |
split - 용량 큰 로그 파일, 텍스트 파일 나누기 (0) | 2025.01.22 |
tcl - regsub 문자열 치환 함수 (0) | 2025.01.13 |
쉡 스크립트 if []; then 에 등장하는 세미콜론의 의미? (0) | 2025.01.09 |