Дивно, названі «тут документи» дозволяють використовувати вхід / вихід перенаправлення всередині 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