기계적 인조 인간

배쉬 heredoc

í•ìƒì œë¥¼ 사용해도 되나

í•ìƒì œë¥¼ 사용해도 되나

차례:

Anonim

쉘 스크립트를 작성할 때 여러 줄의 텍스트 또는 코드 블록을 대화식 명령 (예: tee , cat 또는 sftp 에 전달해야하는 상황에 처할 수 있습니다.

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

HereDoc 작성 구문은 다음 형식을 따릅니다.

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • 첫 번째 행은 선택적 명령으로 시작하고 특수 리디렉션 연산자 << 및 구분 식별자로 시작합니다.
    • 문자열을 구분 식별자로 사용할 수 있으며 가장 일반적으로 사용되는 것은 EOF 또는 END입니다. 구분 식별자가 인용되지 않은 경우 쉘은 여기에 문서 행을 명령에 전달하기 전에 모든 변수, 명령 및 특수 문자를 대체합니다. 리디렉션 연산자 <<- 에 대한 빼기 기호는 모든 선행 탭 문자를 무시합니다. 쉘 스크립트로 여기 문서를 작성할 때 들여 쓰기를 사용할 수 있습니다. 선행 공백 문자는 허용되지 않으며 탭만 허용됩니다.
    here-document 블록에는 문자열, 변수, 명령 및 기타 유형의 입력이 포함될 수 있습니다. 마지막 줄은 구분 식별자로 끝납니다. 분리 문자 앞의 공백은 허용되지 않습니다.

기본 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 무엇이며 쉘 스크립트에서이를 사용하는 방법을 배웠습니다.

bash 터미널