셸 스크립트를 작성할 때 tee, cat 또는 sftp와 같은 대화형 명령어에 텍스트 또는 코드의 여러 줄 블록을 전달해야 하는 상황에 놓일 수 있습니다.
Bash 및 Zsh와 같은 다른 셸에서 Here 문서(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 서버에 연결할 수도 있습니다.
'SW > 리눅스' 카테고리의 다른 글
Linux, Window : Raspberry Pi에 Raspbian 설치 방법, 예제, 명령어 (1) | 2021.08.30 |
---|---|
Linux : File 생성 방법, 예제, 명령어 (0) | 2021.08.29 |
CentOS 7 : TensorFlow 설치 방법, 예제, 명령어 (0) | 2021.08.27 |
CentOS 7 : Slack 설치 방법, 예제, 명령어 (0) | 2021.08.26 |
Linux : Xargs 사용 방법, 예제, 명령어 (1) | 2021.08.25 |