본문 바로가기

🔍 cat << EOF > $temp_script 의 동작 방식

이 구문은 "Here Document" (히어 문서) 라고 불리는 쉘 스크립트에서 여러 줄을 파일에 직접 쓰는 방법이야.
즉, EOF라는 마커를 기준으로 여러 줄의 내용을 하나의 파일로 저장할 수 있어.


cat << EOF > $temp_script 의 동작 과정

  1. cat << EOFcat 명령어를 실행하지만 입력을 직접 제공(Here Document 방식).
  2. > $temp_script출력을 $temp_script라는 파일에 저장.
  3. 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 의 주요 특징

  1. 여러 줄을 한 번에 파일로 저장 가능

    • echo "..." >> file 을 반복하지 않아도 됨.
    • 여러 줄을 한 번에 입력 가능.
  2. 쉘 스크립트에서 자동 생성 파일을 만들 때 유용

    • 복잡한 명령을 여러 번 echo로 작성할 필요 없음.
  3. 변수 확장 가능 ($변수 가 해석됨)

    set name = "John"
    cat << EOF > script.csh
    echo "Hello, $name"
    EOF
    • $name"John"으로 변환됨.
  4. 변수 확장 없이 문자열 그대로 저장하려면 << '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를 활용하여 해결 가능

B로그0간

개발 관련 글과 유용한 정보를 공유하는 공간입니다.