íìì 를 ì¬ì©í´ë ëë
차례:
쉘 스크립트를 작성할 때 여러 줄의 텍스트 또는 코드 블록을 대화식 명령 (예:
tee
,
cat
또는
sftp
에 전달해야하는 상황에 처할 수 있습니다.
Bash와 Zsh와 같은 다른 셸에서 Here 문서 (Heredoc)는 명령에 여러 줄의 입력을 전달할 수있는 일종의 리디렉션입니다.
HereDoc 작성 구문은 다음 형식을 따릅니다.
<< 'DELIMITER' HERE-DOCUMENT DELIMITER
- 첫 번째 행은 선택적 명령으로 시작하고 특수 리디렉션 연산자
<<
및 구분 식별자로 시작합니다.- 문자열을 구분 식별자로 사용할 수 있으며 가장 일반적으로 사용되는 것은 EOF 또는 END입니다. 구분 식별자가 인용되지 않은 경우 쉘은 여기에 문서 행을 명령에 전달하기 전에 모든 변수, 명령 및 특수 문자를 대체합니다. 리디렉션 연산자
<<-
에 대한 빼기 기호는 모든 선행 탭 문자를 무시합니다. 쉘 스크립트로 여기 문서를 작성할 때 들여 쓰기를 사용할 수 있습니다. 선행 공백 문자는 허용되지 않으며 탭만 허용됩니다.
- 문자열을 구분 식별자로 사용할 수 있으며 가장 일반적으로 사용되는 것은 EOF 또는 END입니다. 구분 식별자가 인용되지 않은 경우 쉘은 여기에 문서 행을 명령에 전달하기 전에 모든 변수, 명령 및 특수 문자를 대체합니다. 리디렉션 연산자
기본 Heredoc 예제
이 섹션에서는 heredoc 사용법에 대한 몇 가지 기본 예제를 살펴 보겠습니다.
Heredoc은 cat 명령과 함께 가장 자주 사용됩니다.
다음 예제에서는 환경 변수와 here 문서를 사용하여
cat
명령을 포함하는 두 줄의 텍스트를 전달합니다.
cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF
아래 출력에서 볼 수 있듯이 변수 및 명령 출력이 모두 대체됩니다.
The current working directory is: /home/linuxize You are logged in as: linuxize
구분자를 작은 따옴표 나 큰 따옴표로 묶으면 어떻게되는지 봅시다.
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
로
e
.
cat <<'EOF' | sed 's/l/e/g' Hello World EOF
Heeeo Wored
파이프 된 데이터를 파일에 쓰려면:
cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF
SSH와 함께 Heredoc 사용
Heredoc 사용은 SSH를 통해 원격 시스템에서 여러 명령을 실행하는 가장 편리하고 쉬운 방법 중 하나입니다.
따옴표없는 구분 기호를 사용할 때는 모든 변수, 명령 및 특수 문자를 이스케이프해야합니다. 그렇지 않으면 로컬로 보간됩니다.
ssh -T [email protected] << 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/linuxize The current remote working directory is: /home/user
SSH 키 기반 인증을 설정하고 비밀번호를 입력하지 않고 Linux 서버에 연결할 수도 있습니다.
결론
이 안내서에서는
heredoc
무엇이며 쉘 스크립트에서이를 사용하는 방법을 배웠습니다.