🔍 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 > 리눅스' 카테고리의 다른 글
| csh 스크립트 - 특정 텍스트 라인 패턴에서 숫자 추출하기 예제 (0) | 2025.03.05 |
|---|---|
| sed 로 # 뒤 문자열 제거하기, 즉 주석 같은 구문 제거 (0) | 2025.02.07 |
| grep 으로 문자열 검색하기 (0) | 2025.01.22 |
| split - 용량 큰 로그 파일, 텍스트 파일 나누기 (0) | 2025.01.22 |
| tcl - regsub 문자열 치환 함수 (0) | 2025.01.13 |