이상하게 지명 된 "여기서 문서"는 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 시스템을 백업하는 방법