리눅스에서 bash에서 "여기 문서"를 사용하는 방법

Mar 31, 2025
리눅스
[삼]
Fatmawati Achmad Zaenuri / Shutterstock.

이상하게 지명 된 "여기서 문서"는 Linux에서 Bash 스크립트 내에서 입력 / 아웃 리디렉션을 사용하도록합니다. 원격 컴퓨터에서 실행 해야하는 명령을 자동화하는 훌륭한 방법입니다.

여기 문서

리눅스의 많은 명령은 2 ~ 3 개의 문자 이름을 가지고 있습니다. 이것은 부분적으로 Linux가 배우기가 어렵고 arcane 명령으로 가득차있는 개념을 일으키는 것입니다. 그러나 Linux에서 가장 이상한 이름 중 하나는 암호로 짧은 것들 중 하나가 아닙니다. "여기서 문서"는 문서가 아니며 "여기서"이란 무엇인지 정말로 분명하지 않습니다.

그들은 상대적으로 모호한 구조물이지만 유용합니다. 물론 이것은 Linux이므로 고양이가있는 피부에 대한 두 가지가 있습니다. 여기에 제공되는 일부 기능은 다른 방식으로 복제 될 수 있습니다. 이러한 대체 방법은 일반적으로 더 복잡합니다. 프로그래밍 및 스크립팅에서 "더 복잡한"을 의미하는 "버그에 대한 더 많은 덕분"및 코드가 유지하기가 어렵습니다.

여기서 여기서 문서가 실제로 Excel은 스크립트 내에서 설정된 연결에서 원격 컴퓨터로 보내려는 명령의 자동화에 있습니다. 연결을 쉽게 만드는 경우에는 연결이 이루어지면 스크립트에서 원격 컴퓨터의 쉘로 "펌프"를 어떻게 펌프로합니까? 여기서 문서를 사용하면 단순히 그렇게 할 수 있습니다.

여기의 기본 원칙

여기서 문서의 관용적 표현은 다음과 같습니다.

 명령 & lt; LIMIT_STRING.
 ...에
 ...에
텍스트
데이터
변수
...에
...에
LIMIT_STRING 
  • 명령 : 이는 리디렉션 된 입력을 허용하는 Linux 명령이 될 수 있습니다. 참고, 에코 명령 리디렉션 된 입력을 허용하지 않습니다 ...에 화면에 쓸 필요가있는 경우, 고양이 명령, 그하는 ...에
  • & lt; : 리디렉션 연산자.
  • LIMIT_STRING. : 이것은 레이블입니다. 명령으로 리디렉션하는 데이터 목록에 나타나지 않는 한 원하는대로 원하는대로 원하는대로 할 수 있습니다. 텍스트, 데이터 및 변수 목록의 끝을 표시하는 데 사용됩니다.
  • 데이터 목록 : 명령에 공급할 데이터 목록입니다. 명령, 텍스트 및 변수가 포함될 수 있습니다. 데이터 목록의 내용은 _limit_string이 발생할 때까지 한 번에 한 줄에 명령으로 공급됩니다.

"eof"를 한계 문자열로 사용하는 문서의 예를 볼 수 있습니다. 우리는 그 접근 방식을 선호하지 않습니다. 그것은 작동하지만 "eof"는 "파일 끝"을 의미합니다. 홈 문서가 스크립트 파일의 마지막 일이 아닌 경우 "eof"가 잘못 사용되고 있습니다.

당신이하는 일을 말하는 한계 문자열을 사용하는 경우 스크립트를 훨씬 읽을 수 있습니다. 일련의 명령을 원격 컴퓨터에 보내는 경우 안전한 쉘 (ssh), "_remote_commands"와 같은 무언가를 호출하는 한계 문자열은 완벽한 의미가 있습니다. 밑줄로 시작할 필요가 없습니다. " _ " 캐릭터. 우리는 당신의 스크립트에서 평범한 것으로 표시하기 때문에 그것을합니다.

간단한 예

명령 줄과 스크립트에서 여기서는 여기에 문서를 사용할 수 있습니다. 터미널 창에서 다음을 입력하면 " & gt; "Enter"를 누를 때마다 라인 연속 프롬프트 "_end_of_text"제한 문자열을 입력하고 "Enter"를 누르면 웹 사이트 목록이 전달됩니다. 고양이, 그리고 그들은 터미널 창에 표시됩니다.

 고양이 & lt; _end_of_text.
방법 괴짜
괴짜를 검토하십시오
LifeSavvy.
그것을 구름
사고번
_end_of_text 

그것은 가장 가치가있는 운동의 여지가 아닙니다. 그러나 전체 데이터 목록이 수집되고 한계 문자열이 발생할 때까지 명령으로 보내지는 것을 입증합니다. NS 고양이 명령은 "_end_of_text"라는 제한 문자열을 입력하고 "Enter"키를 누를 때까지 입력이 나타나지 않습니다.

우리는 스크립트에서 똑같은 일을 할 수 있습니다. 이 예제를 입력하거나 편집기에 복사하고 파일을 "heredoc-1.sh"로 저장하고 편집기를 닫습니다.

 #! / bin / bash.

고양이 & lt; & lt; "_end_of_text"
사용자 이름은 다음과 같습니다. $ (WHOAMI)
현재 작업 디렉토리는 다음과 같습니다. $ PWD.
Bash 버전은 다음과 같습니다. $ bash_version.
_end_of_text 

이 기사를 따르면 매번 스크립트를 만들 때마다 필요합니다. 그것을 실행 가능하게 만드십시오 그것이 실행되기 전에. 각각의 경우에, 사용 chmod. 명령 ...에 여기에서 사용되는 스크립트 이름에 대해 각 예제에서 스크립트의 이름을 대체하십시오.

 chmod + x heredoc-1.sh 

이 스크립트에는 두 개의 환경 변수가 포함되어 있습니다. $ pwd. 그리고 $ bash_version. ...에 환경 변수 이름은 현재 작업 디렉토리와 스크립트가 실행될 때 현재 작업 디렉토리와 Bash-v 전을 데이터 값으로 바꿉니다.

스크립트도 사용합니다 명령 대체 ~에 NS 빌어 먹을 명령 ...에 명령의 이름은 자체 출력으로 바뀝니다. 전체 스크립트의 출력은 CAT 명령에 의해 터미널 창에 기록됩니다. 이름으로 전화를 걸어 스크립트를 실행합니다.

 ./ heredoc-1.sh 

스크립트를 수정하고 여기의 첫 번째 행에서 한계 문자열을 인용 부호로 표시하는 경우 " ...에 " "데이터 목록이 여기에 문서 명령어로 전달됩니다. 변수 값 대신 변수 이름이 표시되며 명령 대체가 수행되지 않습니다.

 #! / bin / bash.

고양이 & lt; & lt; - "_end_of_text"
사용자 이름은 다음과 같습니다. $ (WHOAMI)
현재 작업 디렉토리는 다음과 같습니다. $ PWD.
Bash 버전은 다음과 같습니다. $ bash_version.
_end_of_text 

취급 탭 문자

기본적으로 데이터 목록의 탭 문자가 유지되고 터미널 창에 기록됩니다. 이 예제를 복사하여 "heredoc-2.sh"로 저장하십시오. 그것을 사용하여 실행 가능하게 만드십시오 chmod. 명령. 들여 쓰기 된 줄을 편집하여 일련의 공백이 아닌 회선의 시작 부분에 하나 또는 두 개의 탭 문자가 있는지 확인하십시오.

 #! / bin / bash.

고양이 & lt; & lt; _end_of_text.
사용자 이름은 다음과 같습니다. $ (WHOAMI)
  현재 작업 디렉토리는 다음과 같습니다. $ PWD.
    Bash 버전은 다음과 같습니다. $ bash_version.
_end_of_text 
 ./ heredoc-2.sh 

탭은 터미널 창에 기록됩니다.

대시를 추가하여 " - "리디렉션 운영자에게 여기서 문서는 선행 탭 문자를 무시합니다. 이 예제를 "heredoc-3.sh"로 저장하고 실행 파일을 만드십시오.

 #! / bin / bash.

고양이 & lt; & lt; _end_of_text.
사용자 이름은 다음과 같습니다. $ (WHOAMI)
  현재 작업 디렉토리는 다음과 같습니다. $ PWD.
    Bash 버전은 다음과 같습니다. $ bash_version.
_end_of_text 
 ./ heredoc-3.sh 

탭은 무시됩니다. 이것은 사소한 것처럼 보일 수 있지만 스크립트의 들여 쓰기 된 섹션으로 인해 선행 탭에 대처하는 것이 좋습니다.

루프 및 기타 논리적 구성은 일반적으로 들여 쓰기됩니다. 여기에 문서가 스크립트의 들여 쓰기 섹션에 포함되어있는 경우 대시를 사용하여 " - "리디렉션 운영자가 선행 탭 문자로 인한 서식 지정 문제를 제거합니다.

 #! / bin / bash.

사실이면; 그 다음에
  고양이 & lt; _limit_string.
  선 1 라인 1 탭.
  선행 탭이있는 2 행.
  선 3 선행 탭.
  _limit_string.
fi 

파일로 리디렉션합니다

여기서 문서와 함께 사용되는 명령의 출력을 파일로 리디렉션 할 수 있습니다. 사용 " & gt; "(파일 만들기) 또는" & gt; & gt; "(존재하지 않으면 파일을 만드는 경우 파일을 작성하십시오) 리디렉션 운영자 ~ 후에 여기서는 여기의 첫 번째 줄의 한계 문자열입니다.

이 스크립트는 "heredoc-4.sh"입니다. 출력을 "session.txt"라는 텍스트 파일로 리디렉션합니다.

 #! / bin / bash.

고양이 & lt; & lt; _end_of_text & gt; session.txt.
사용자 이름은 다음과 같습니다. $ (WHOAMI)
현재 작업 디렉토리는 다음과 같습니다. $ PWD.
Bash 버전은 다음과 같습니다. $ bash_version.
_end_of_text 
 ./ heredoc-4.sh 
 CAT SESSION.TEXT 

출력을 다른 명령으로 배관합니다

여기서 문서에서 사용 된 명령의 출력은 다른 명령의 입력으로 파이프 할 수 있습니다. 사용하다 파이프 " | " 운영자 ~ 후에 여기서는 여기의 첫 번째 줄의 한계 문자열입니다. 우리는 여기서 문서 명령에서 출력을 파이프 할 것입니다. 고양이 , 안으로 징조 ...에 우리는하고 싶습니다 모든 발생을 대체하십시오 편지 "e"문자의 편지의

이 스크립트를 "hereDoc-5.sh"라는 이름을 지정하십시오.

 #! / bin / bash.

고양이 & lt; & lt; _end_of_text | sed 's / a / e / g'
어떻게
NS
가악
_end_of_text 
 ./ heredoc-5.sh 

"Gaak"는 "괴짜"로 수정됩니다.

함수에 매개 변수를 보내는 것

여기서 문서와 함께 사용되는 명령은 스크립트의 함수가 될 수 있습니다.

이 스크립트는 일부 차량 데이터를 함수로 전달합니다. 이 함수는 사용자가 입력 한 것처럼 데이터를 읽습니다. 그런 다음 변수의 값이 인쇄됩니다. 이 스크립트를 "heredoc-6.sh"로 저장하십시오.

 #! / bin / bash.

# set_car_details () 함수
set_car_details ()
{
읽기
모델을 읽으십시오
new_used.
Delivery_Collect를 읽으십시오
위치 읽기
가격을 읽으십시오
}

# set_car_details ()로 데이터를 전달하는 여기서 문서
set_car_details & lt; & lt; _mars_rover_data.
나사
인내 로버
사용 된
수집
화성 (Long, Lat) 77.451865,18.445161.
2.2 억
_mars_rover_data.

# 차량 세부 사항을 검색합니다
echo "make : $ make"
echo "모델 : $ model"
echo "new 또는 used : $ new_used"
echo "배달 또는 컬렉션 : $ delivery_Collect"
echo "위치 : $ location"
echo "Price \ $ : $ 가격"
 ./ heredoc-6.sh 

차량 세부 사항은 터미널 창에 기록됩니다.

이메일 작성 및 보내기

우리는 여기서 문서를 사용하여 이메일을 작성하고 보낼 수 있습니다. 우리는 리디렉션 연산자 앞의 명령에 매개 변수를 전달할 수 있습니다. 이었다 Linux를 사용하여 우편 명령 에게 로컬 메일 시스템을 통해 이메일을 보냅니다 "Dave"라는 사용자 계정에 NS -NS (제목) 옵션을 사용하면 전자 메일의 제목을 지정할 수 있습니다.

이 예제는 "hereDoc-7.sh"를 폼으로 구성합니다.

 #! / bin / bash.

기사 = "여기 문서"

메일 -S '작업 부하 상태'Dave & lt; & lt; _프로젝트 보고서
사용자 이름 : $ (WHOAMI)
과제를 완료했습니다 :
기사 : $ 3.
_PROJECT_REPORT 
 ./ heredoc-7.sh 

이 스크립트에서 볼 수있는 출력이 없습니다. 그러나 우리가 우편물을 확인할 때, 우리는 이메일이 이메일을 구성, 파견 및 배달했음을 알 수 있습니다.

 메일 

SSH로 여기서 문서 사용

여기서 문서는 SSH 연결이 설정되면 원격 컴퓨터에서 일부 명령을 실행하는 강력하고 편리한 방법입니다. 두 대의 컴퓨터간에 SSH 키를 설정 한 경우 로그인 프로세스가 완전히 자동으로됩니다. 이 빠르고 더러운 예제에서는 원격 컴퓨터의 사용자 계정의 암호를 묻는 메시지가 표시됩니다.

이 스크립트는 "heredoc-8.sh"입니다. 우리는 "원격 PC"라는 원격 컴퓨터에 연결할 것입니다. 사용자 계정을 "Dave"라고합니다. 우리는을 사용하고 있습니다 -NS (의사 단자 할당을 비활성화) 옵션을 사용하면 대화 형 의사 터미널이 우리에게 할당 될 필요가 없으므로.

스크립트의 "여기에서 작업하기"섹션에서는 명령 목록을 전달할 수 있으며 원격 컴퓨터에서 실행됩니다. 물론 원격 컴퓨터에있는 스크립트를 호출 할 수 있습니다. 원격 스크립트는 실행하려는 모든 명령과 루틴을 저장할 수 있습니다.

우리의 script-hereDoc-8.Sh-8.Sh가 수행 할 모든 것은 원격 컴퓨터의 연결 로그를 업데이트하는 것입니다. 사용자 계정 및 시간 및 날짜 스탬프가 텍스트 파일에 기록됩니다.

 #! / bin / bash.

ssh -t [email protected] & lt; & lt; _remote_commands.

# 여기에서 일을해야합니다

# 연결 로그 업데이트
에코 $ USER "-"$ (날짜) & gt; /home/dave/conn_log/script.log.
_remote_commands 

명령을 실행하면 계정의 암호를 묻는 메시지가 표시됩니다. 원격 컴퓨터.

 ./ heredoc-8.sh 

원격 컴퓨터에 대한 정보가 표시되며 명령 프롬프트로 돌아갑니다.

원격 컴퓨터, 우리는 사용할 수 있습니다 고양이 연결 로그를 확인하려면 다음을 수행하십시오.

 CAT CONN_LOG / script.log 

각 연결이 우리를 위해 나열됩니다.

관련된: Linux 셸에서 SSH 키를 만드고 설치하는 방법

이상한 이름, 깔끔한 기능

여기서 문서는 기발하지만 특히 원격 컴퓨터로 명령을 보내는 데 사용될 때 강력합니다. 백업 루틴을 사용하여 간단한 문제가 될 것입니다. rsync. ...에 그런 다음 스크립트를 원격 컴퓨터에 연결하고 나머지 저장 공간을 확인하고 공백이 낮아지면 경고 전자 메일을 보낼 수 있습니다.

관련된: Rsync로 Linux 시스템을 백업하는 방법


리눅스 - 가장 인기있는 기사

Linux에 신호 데스크탑을 설치하는 방법

리눅스 Jan 22, 2025

[삼] 엘리 쥬 가이슬러 / Shutterstock.com 신호 ~이다 개인 정보 보호에 초점을 맞춘 스마트 폰 메시징 응용 프로그램 모�..


Linux Bash 스크립트에서 라인별로 파일 행을 처리하는 방법

리눅스 Feb 3, 2025

[삼] Fatmawati Achmad Zaenuri / Shutterstock. 미묘한 GoTchas를 처리하는 한 쉘 스크립트에서 Linux 텍스트 파일 행의 내용을 읽는 것은 꽤 �..


우분투, 쿠분투, 분투, 그리고 루 분투 사이에 선택하는 방법

리눅스 Mar 19, 2025

[삼] Tomeqs / Shutterstock.com. 하나 이상의 우분투가 있습니다. Ubuntu, Kubuntu, Xubuntu 또는 Lubuntu : 그러나 차이점은 무엇이며, 선�..


Mac에서 모든 데스크탑 아이콘을 숨기는 방법

리눅스 Jun 23, 2025

[삼] Krisda / Shutterstock. Mac 데스크탑이 엉망입니까? 모든 것을 정말로 조직하고 싶지 않아? 걱정하지 마십시오. 터미널 명�..


STRACE를 사용하여 Linux 시스템 호출을 모니터링하는 방법

리눅스 Jun 23, 2025

[삼] Fatmawati Achmad Zaenuri / Shutterstock.com 리눅스 프로그램은 다음과 같은 것을 요청합니다 핵심 그들을 위해 몇 가지 일을..


Linux 턴 30 : 취미 프로젝트가 세계를 정복했는지

리눅스 Sep 17, 2025

[삼] 래리 슈와 김프 에 1991 년 9 월 17 일 Linus Torvalds는 처음으로 Linux 커널 (버전 0.01)을 출시했습니다. 작은 취미 �..


포트 번호로 리눅스 프로세스를 죽이는 방법

리눅스 Oct 4, 2025

Linux 프로세스를 죽이려면 ID 또는 이름이 필요합니다. 당신이 아는 것은 그것이 사용하는 포트라면, 당신은 여전히 그것을 죽일 수 있습니까? 예, ..


7 실수 새로운 Linux 사용자가 만드는 (그리고 피하는 방법)

리눅스 Nov 11, 2024

Linux를 배우는 것은 모든 작은 것이 전투처럼 느껴지는 실망스러운 경험이 될 수 있습니다. 이러한 일반적인 실수를 피하면 Linux의 소개 및 채택이..


카테고리