SW/리눅스

Linux : Bash Heredoc 사용 방법, 예제, 명령어

얇은생각 2021. 8. 28. 07:30
반응형

셸 스크립트를 작성할 때 tee, cat 또는 sftp와 같은 대화형 명령어에 텍스트 또는 코드의 여러 줄 블록을 전달해야 하는 상황에 놓일 수 있습니다.

Bash 및 Zsh와 같은 다른 셸에서 Here 문서(Heredoc)는 명령에 여러 줄의 입력을 전달할 수 있는 리디렉션 유형입니다.

 

 

Linux : Bash Heredoc 사용 방법, 예제, 명령어

 

 

HereDoc 작성 구문은 다음 형식을 사용합니다.

[COMMAND] <<[-] 'DELIMITER'
  HERE-DOCUMENT
DELIMITER

 

 

첫 번째 행은 선택적 명령으로 시작하여 특수 리디렉션 연산자 << 및 구분 식별자 뒤에 나옵니다.

구분 식별자로 문자열을 사용할 수 있으며, 가장 일반적으로 사용되는 문자열은 EOF 또는 END입니다.

구분 식별자가 따옴표로 묶이지 않은 경우 셸이 모든 변수, 명령 및 특수 문자를 대체한 후 여기에 문서 줄을 명령어에 전달합니다.

리디렉션 연산자 <<->에 마이너스 기호를 추가하면 선행 탭 문자가 모두 무시됩니다. 이렇게 하면 셸 스크립트에 여기에 문서를 작성할 때 들여쓰기를 사용할 수 있습니다. 선행 공백 문자는 허용되지 않으며 탭만 사용할 수 있습니다.

문서 블록에는 문자열, 변수, 명령 및 기타 모든 유형의 입력이 포함될 수 있습니다.

마지막 줄은 구분 식별자로 끝납니다. 구분 기호 앞에는 공백을 사용할 수 없습니다.

 

 

 

기본 Heredoc 예제

이 섹션에서는 Heredoc 사용 방법에 대한 몇 가지 기본적인 예를 살펴보겠습니다.

Eedoc은 cat 명령과 함께 가장 자주 사용됩니다.

다음 예제에서는 환경 변수와 여기에 있는 문서를 사용하여 분류하는 명령이 포함된 두 줄의 텍스트를 전달합니다.

cat << EOF
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

 

 

아래 출력에서 볼 수 있듯이 변수 출력과 명령 출력이 모두 대체됩니다.

The current working directory is: /home/jjeongil
You are logged in as: jjeongil

 

 

구분 기호를 작은 따옴표나 큰 따옴표로 묶으면 어떻게 되는지 보겠습니다.

cat <<- "EOF"
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

 

 

구분 기호가 따옴표로 묶이면 매개 변수 확장 및 명령 대체가 셸에서 수행되지 않습니다.

The current working directory is: $PWD
You are logged in as: $(whoami)

 

 

문 또는 루프 내에서 세덱을 사용하는 경우 코드를 들여쓸 수 있는 <<- 리디렉션 작업>을 사용하십시오.

if true; then
    cat <<- EOF
    Line with a leading tab.
    EOF
fi

# Line with a leading tab.

 

 

화면에 출력을 표시하는 대신 >, > 연산자를 사용하여 파일로 리디렉션할 수 있습니다.

cat << EOF > file.txt
The current working directory is: $PWD
You are logged in as: $(whoami)
EOF

 

 

file.txt가 존재하지 않으면, 생성될 것입니다. >를 사용할 때 파일은 덮어써지고, >는 출력을 파일에 추가합니다. 

Heredoc 입력도 파이프로 연결할 수 있습니다. 다음 예에서 sed 명령은 l 문자의 모든 인스턴스를 e로 바꿉니다.

cat <<'EOF' |  sed 's/l/e/g'
Hello
World
EOF

# Hello
# Wored

 

 

파이프 데이터를 파일에 쓰려면 다음과 같이 하십시오.

cat <<'EOF' |  sed 's/l/e/g' > file.txt
Hello
World
EOF

 

 

 

Eredoc을 SSH와 함께 사용

Eredoc 사용은 SSH를 통해 원격 시스템에서 여러 명령을 실행하는 가장 편리하고 쉬운 방법 중 하나입니다.

따옴표로 묶이지 않은 구분 기호를 사용할 경우 모든 변수, 명령 및 특수 문자를 이스케이프해야 합니다. 그렇지 않으면 변수, 명령 및 특수 문자가 로컬로 보관됩니다.

ssh -T user@host.com << EOF
echo "The current local working directory is: $PWD"
echo "The current remote working directory is: \$PWD"
EOF

# The current local working directory is: /home/jjeongil
# The current remote working directory is: /home/user

 

 

또한 SSH 키 기반 인증을 설정하고 암호를 입력하지 않고 Linux 서버에 연결할 수도 있습니다.

반응형