Як використовувати "тут документи" у Баші на Linux

Mar 31, 2025
Linux,
Fatmawati Achmad Zaenuri / Shutterstock

Дивно, названі «тут документи» дозволяють використовувати вхід / вихід перенаправлення всередині Bash сценаріїв на Linux. Вони відмінний спосіб автоматизувати команди, необхідні для роботи на віддаленому комп'ютері.

документи тут

Багато команд в Linux мають два або три назви букв. Це почасти те, що приводить до поняття, що Linux важко вчитися і сповнений таємних команд. Але один з найдивніших імен в Linux не одна із загадково коротких. «Тут документи» не є документами, і це насправді не ясно, що «тут» відноситься, або.

Вони є порівняно маловідомої конструкцією, але вони корисні. Звичайно, це Linux, так що є більш ніж один спосіб шкіри кішки. Деякі функціональні можливості, що надаються тут документи можуть бути відтворені іншими способами. Ці альтернативні методи, як правило, більш складні. У програмуванні і сценаріїв, «більш складним» також означає «більш схильні до помилок,» і що ваш код важче підтримувати.

Де тут документи дійсно головує в автоматизації команд, які ви хочете відправити на віддалений комп'ютер від з'єднання, встановленого в сценарії. Створення зв'язку легко, але після того, як з'єднання було зроблено, як ви «насос» ваші команди з сценарію в оболонку на віддаленому комп'ютері? Тут документи дозволяють зробити це дуже просто.

Основні принципи Тут Документи

Ідіоматичне уявлення тут документ виглядає наступним чином:

 КОМАНДА & л; & л; limit_string
 .
 .
текст
дані
змінні
.
.
limit_string 
  • КОМАНДА : Це може бути будь-яка команда Linux, яка приймає перенаправлений вхід. Відзначимо, що ехо командування не приймає перенаправлений входу . Якщо вам потрібно записати на екран, ви можете використовувати кішка команда, який робить .
  • & ЛТ; & Lt; Оператор перенаправлення.
  • limit_string : Це мітка. Це може бути що завгодно, поки він не з'являється в списку даних, які ви перенаправлення в команду. Він використовується, щоб відзначити кінець тексту, даних і списку змінних.
  • список даних : Список даних, які будуть подаватися в команду. Він може містити команди, текст і змінні. Вміст списку даних подаються в командному рядку одну, в той час, поки _limit_string не зустрічається.

Ви, ймовірно, побачити приклади тут документи, що використання «EOF» в якості граничної рядка. Ми не підтримуємо такий підхід. Він працює, але «EOF» означає «Кінець файлу.» Крім рідкісних випадках, коли домашній документ є останнім, що в файлі сценарію, «EOF» використовується помилково.

Це зробить ваші скрипти набагато зручнішим для читання, якщо ви використовуєте граничну рядок, яка посилається на те, що ви робите. Якщо ви відправляєте серію команд на віддалений комп'ютер по Secure Shell (SSH), обмеження рядок називається щось на кшталт «_remote_commands» би прекрасний сенс. Вам не потрібно, щоб почати їх з підкресленням « _ »Характер. Ми робимо це, тому що позначає їх як щось незвичайним в сценарії.

прості приклади

Ви можете використовувати тут документи в командному рядку і в скриптах. При введенні наступного у вікні терміналу, ви побачите « & Gt; »Продовження рядка підкаже кожен раз, коли ви натиснете" Enter ". При введенні «_end_of_text» граничної рядок і натисніть «Enter» список сайтів передаються кішка, і вони відображаються у вікні терміналу.

 кішка & л; & л; _end_of_text
Як-гейк
Огляд Geek
LifeSavvy
CloudSavvy IT
MindBounce
_end_of_text 

Це не виправдало вправи, але це не показати, що нічого посилається команда, поки весь список даних не сортуються і гранична рядок зустрічаються. Точний кішка команда не отримує вхідний сигнал, поки не буде введений ліміт рядок «_end_of_text» і натисніть клавішу «Enter».

Ми можемо зробити те ж саме в скрипті. Введіть або скопіювати цей приклад в редактор, збережіть файл як «heredoc-1.sh» і закрийте редактор.

 #! / Bin / Баш

Кішка & л; & л; "_End_of_text"
Ваше ім'я користувача: $ (Whoami)
Ваш поточний робочий каталог: $ PWD
Ваша версія Bash є: $ BASH_VERSION
_end_of_text 

Як ви дотримуєтесь цієї статті, кожен раз, коли ви створюєте скрипт, вам буде потрібно зробити це виконуваним перш ніж він буде працювати. У кожному випадку використовувати хмод командування . Замініть назву сценарію в кожному прикладі для назви сценарію, яка використовується тут.

 Chmod + X Heredoc-1.Sh 

Цей сценарій містить два змінні середовища, $ Pwd і $ Bash_version . Імена змінних середовища замінюються своїми значеннями даних - поточний робочий довідник та версію bash, коли скрипт виконується.

Сценарій також використовує Заміна команди на точний хто я командування . Назва команди замінюється власним виходом. Вихід з усього сценарію записується до кінцевого вікна кота. Ми запускаємо скрипт, закликаючи його за назвою:

 ./ Heredoc-1.Sh 

Якщо ви змінюєте скрипт і оберніть лімітну рядок у першому рядку тут документ у лапках " " "Список даних передається тут документообігу команду verbatim. Імена змінних відображаються замість змінних значень, а команда заміни не відбудеться.

 #! / Bin / bash

Cat & Lt; & lt; - "_END_OF_TEXT"
Ваше ім'я користувача: $ (WHOAMI)
Ваш поточний робочий довідник: $ PWD
Ваша версія Bash: $ bash_version
_END_OF_TEXT 

Характеристики вкладки

За замовчуванням символи вкладки у вашому списку даних будуть збережені та записуються на вікно терміналу. Скопіюйте та збережіть цей приклад як "heredoc-2.sh". Зробити його виконуваним за допомогою хмод Команда. Редагуйте відступи, щоб переконатися, що вони мають одну або дві символи вкладки на початку рядка, а не серія пробілів.

 #! / Bin / bash

cat & lt; & lt; _END_OF_TEXT
Ваше ім'я користувача: $ (WHOAMI)
  Ваш поточний робочий довідник: $ PWD
    Ваша версія Bash: $ bash_version
_END_OF_TEXT 
 ./ heredoc-2.sh 

Вкладки записуються на вікно терміналу.

Додаючи тире " - "До оператора перенаправлення, тут документ буде ігнорувати провідні символи вкладки. Збережіть цей приклад як "heredoc-3.sh" і зробити його виконуваним.

 #! / Bin / bash

cat & lt; & lt; - _END_OF_TEXT
Ваше ім'я користувача: $ (WHOAMI)
  Ваш поточний робочий довідник: $ PWD
    Ваша версія Bash: $ bash_version
_END_OF_TEXT 
 ./ heredoc-3.sh 

Вкладки ігноруються. Це може здатися тривіальним, але це акуратний спосіб впоратися з провідними вкладами через відзначені розділи скриптів.

Петлі та інші логічні конструкції, як правило, відступить. Якщо ваш тут документ міститься в задніх секції сценарію, використовуючи тире " - "За допомогою оператора перенаправлення видаляє питання форматування, викликані провідними символами вкладки.

 #! / Bin / bash

якщо true; тоді
  cat & lt; & lt; - _limit_string
  Рядок 1 з провідною вкладкою.
  Лінія 2 з провідною вкладкою.
  Лінія 3 з провідною вкладкою.
  _limit_string
fi 

Перенаправлення до файлу

Вихід з команди, який використовується з тут документом, може бути перенаправлений у файл. Використовувати " & gt; "(Створіть файл) або" & gt; & gt; "(Створіть файл, якщо він не існує, додайте до файлу, якщо він робить) оператори перенаправлення після Лінійний рядок у першій лінії цього документа.

Цей сценарій є "heredoc-4.sh". Він буде перенаправляти його виведення в текстовий файл під назвою "session.txt".

 #! / Bin / bash

cat & lt; & lt; _END_OF_TEXT & GT; session.txt
Ваше ім'я користувача: $ (WHOAMI)
Ваш поточний робочий довідник: $ PWD
Ваша версія Bash: $ bash_version
_END_OF_TEXT 
 ./ heredoc-4.sh 
 Cat Session.Text 

Трубопроводячи вихід на іншу команду

Вихід з команди, який використовується в цьому документі, може бути переданим як вхід до іншої команди. Використання труба " | "Оператор" після Лінійний рядок у першій лінії цього документа. Ми збираємося працювати з командою документа, кішка в стримувати . Ми хочемо замінити всі випадки літери «а» з буквою «е».

Назвіть цей сценарій «heredoc-5.sh.»

 #! / Bin / bash

cat & lt; & lt; _end_of_text | Сивий 'S / A / E / G'
Як
До
Gaak
_END_OF_TEXT 
 ./ heredoc-5.sh 

«Gaak» виправляється «Geek.»

Передача параметрів функції

Команда, яка використовується з документом тут може бути функцією в сценарії.

Цей сценарій передає деякі дані про транспортний засіб в функцію. Функція зчитує дані, як якщо б він був набраний в користувачем. Значення змінних потім друкуються. Зберегти цей сценарій як «heredoc-6.sh».

 #! / Bin / bash

Функція # в set_car_details ()
set_car_details ()
{
читати макіяж
модель читання
прочитати new_used
читати delivery_collect
читати розташування
ціна читати
}

# Тут документ, який передає дані в set_car_details ()
set_car_details & л; & Lt; _mars_rover_data
НАСА
наполегливість Rover
Використовуваний
Збирати
Марс (довгі, LAT) 77.451865,18.445161
2200000000
_mars_rover_data

# Витягти деталі автомобіля
відлуння "Make: $ роблять"
відлуння «Модель: $ модель»
відлуння «Новий або Б: $ new_used»
відлуння «Доставка або Колекція: $ delivery_collect»
відлуння «Розташування: $ розташування»
відлуння "Ціна \ $: $ ціна" 
 ./ heredoc-6.sh 

Деталі автомобіля записуються в вікні терміналу.

Створення і відправка e-mail

Ми можемо використовувати тут документ, щоб скласти і відправити електронною поштою. Зверніть увагу, що ми можемо передати параметри команди перед оператором перенаправлення. ми використовуючи Linux пошта командування до надіслати електронною поштою через локальну поштову систему до облікового запису користувача під назвою «Дейв». Точний -s варіант (суб'єкт) дозволяє вказати тему повідомлення.

Цей приклад форми сценарію «heredoc-7.sh.»

 #! / Bin / bash

стаття = «Тут документи»

пошту -ва робочого навантаження статус 'Дейва & л; & л; _project_report
Ім'я користувача: $ (Whoami)
Має виконане завдання:
Стаття: $ стаття
_project_report 
 ./ heredoc-7.sh 

Там не видно вихід з цього сценарію. Але коли ми перевіряємо нашу пошту, ми бачимо, що електронна пошта була написана, відправлена ​​і доставлена.

 пошта 

Використання Тут Документи з SSH

Документи тут потужний і зручний спосіб для виконання деяких команд на віддаленому комп'ютері, коли з'єднання SSH встановлено. Якщо ви створили ключі SSH між двома комп'ютерами, процес Логіна буде повністю автоматизований. У цій швидкій і брудною, наприклад, вам буде запропоновано ввести пароль для облікового запису користувача на віддаленому комп'ютері.

Цей сценарій «heredoc-8.sh». Ми збираємося підключитися до віддаленого комп'ютера під назвою «віддалений ПК». Обліковий запис користувача називається «Дейв». ми використовуємо -T (Відключити псевдо-термінал виділення) варіант, тому що нам не потрібно інтерактивний псевдо-термінал, який буде призначений до нас.

В «робити якусь роботу в тут» розділ сценарію, ми могли б передати список команд, і вони будуть виконуватися на віддаленому комп'ютері. Звичайно, можна просто викликати скрипт, який був на віддаленому комп'ютері. Віддалений скрипт може містити всі команди і процедури, які ви хочете виконали.

Все, що наш скрипт-Heredoc-8.sh-збирається зробити, це обновити журнал підключення на віддаленому комп'ютері. Обліковий запис користувача і часу і дати записуються в текстовий файл.

 #! / Bin / bash

SSH -T [email protected] л &; & Lt; _remote_commands

# Зробити деяку роботу тут

# Оновлення журналу підключення
Відлуння $ USER "-" $ (дата) & GT; & GT; /home/dave/conn_log/script.log
_remote_commands 

Коли ми запускаємо команду, ми запропоновано ввести пароль для облікового запису на віддалений комп'ютер.

 ./ heredoc-8.sh 

відображається деяка інформація про віддаленому комп'ютері, і ми повернулися в командному рядку.

На віддалений комп'ютер, ми можемо використовувати кішка перевірити журнал підключення:

 кішка conn_l / script.log 

Кожне з'єднання перераховано для нас.

Пов'язані: Як створити і встановити SSH ключі від Linux Shell

Дивне ім'я, Акуратні Особливості

Тут документи є химерними, але потужними, особливо коли вони використовуються для надсилання команд до віддаленого комп'ютера. Це буде просте питання, щоб сценарій за допомогою резервного копіювання ринок . Сценарій може підключитися до віддаленого комп'ютера, перевірте залишок місця для зберігання та надсилати повідомлення електронної пошти, якщо простір стає низьким.

Пов'язані: Як створити підтримку Linux з RSYNC


Linux, - Найпопулярніші статті

Що нового в Ubuntu 21,04 «Hirsute Бегемот»

Linux, Apr 22, 2025

Новий випуск Ubuntu 21.04 , Hirsute Hippo, був випущений 22 квітня 2021 року. Це тимчасовий випуск популярного р..


Як оновити Ubuntu Linux

Linux, Aug 27, 2025

tomeqs / shutterstock.com Потрібен останній і найбільший у програмі Ubuntu? Вам не потрібно бути Linux P..


Як вийти з вашого Mac за допомогою терміналу

Linux, Aug 8, 2025

Apple дозволяє легко вийти з вашого Mac за допомогою опції в панелі меню робочого столу. Але є також пара к..


Linux виповнюється 30: Як хобі завоював світ

Linux, Sep 17, 2025

Ларрі Евінг і GIMP На 17 вересня 1991 року , Linus torvalds випустив ядро ​​Linux (версія 0.01) впе..


Як встановити Linux на M1 Mac з Apple кремнію

Linux, Nov 11, 2024

Внутрішня підтримка Linux для нової архітектури на базі Apple ще не готова, але ви можете запустити Linux на ..


Як промивати DNS у Linux

Linux, Nov 14, 2024

Ваш досвід перегляду Інтернету повільно на вашому пристрої Linux, чи веб -сайти, які ви відвідуєте застаріли..


Як перелічити змінні середовища на Linux

Linux, Oct 31, 2025

У Linux змінні середовища мають важливі значення та налаштування. Сценарії, програми та оболонки читають ці..


10 Корисні приклади команди Linux rsync

Linux, Oct 24, 2025

Linux rsync Команда - це потужний інструмент копіювання файлів та синхронізацію папки. Ось десять пошире..


Категорії