Странно названные «здесь документы» позволяют использовать перенаправление ввода / выхода внутри сценариев Bash на Linux. Они отличный способ автоматизировать команды, которые вам нужно запустить на удаленном компьютере.
Здесь документы
Многие команды в Linux имеют два или три имена букв. Это частично то, что порождает понятие, что Linux сложно учиться и полон тайных команд. Но одно из странных имен в Linux не одно из загадочных. «Вот документы» не являются документами, и на самом деле не ясно, что «здесь здесь» относится «здесь».
Это относительно неясная конструкция, но они полезны. Конечно, это Linux, поэтому есть более одного способа кожи кошки. Некоторые из функций, предусмотренных здесь документами, могут быть воспроизведены другими способами. Эти альтернативные методы обычно более сложны. В программировании и сценариях «более сложно» также означает «более склонный к ошибкам», и что ваш код сложнее для обслуживания.
Если здесь здесь документы действительно Excel в автоматизации команд, которые вы хотите отправить на удаленный компьютер из соединения, установленного изнутри скрипта. Создание соединения легко, но после того, как соединение было сделано, как вы «накачаете» свои команды из своего сценария в оболочку на удаленном компьютере? Здесь документы позволяют вам сделать это очень просто.
Основные принципы здесь документов
Идиоматическое представление здесь документа здесь выглядит следующим образом:
Команда & lt; limit_string. Отказ Отказ текст данные переменные Отказ Отказ limit_string
-
Команда
: Это может быть любая команда Linux, которая принимает перенаправленные входные данные. Обратите внимание
эхокоманда не принимает перенаправленный вход Отказ Если вам нужно написать на экран, вы можете использоватьКоткоманда, который делает Отказ - & lt; : Оператор перенаправления.
- limit_string. : Это метка. Это может быть все, что вам нравится, если он не отображается в списке данных, которые вы перенаправляете в команду. Он используется для отмены конца списка текста, данных и переменных.
- Список данных : Список данных, которые должны подаваться в команду. Он может содержать команды, текст и переменные. Содержимое списка данных подается в командную строку одновременно до тех пор, пока не столкнутся _limit_String.
Вы, вероятно, увидите примеры здесь документов, которые используют «EOF» в качестве лимитной строки. Мы не поддерживаем этот подход. Работает, но «EOF» означает «конец файла». Помимо редкого случая, когда домашний документ - это последнее в файле сценария, «EOF» используется ошибочно.
Это сделает ваши сценарии гораздо более читаемыми, если вы используете ограниченную строку, которая относится к тому, что вы делаете. Если вы отправляете ряд команд на удаленный компьютер
Безопасная оболочка
(SSH), ограниченная строка, называемая что-то вроде «_remote_Commands», имеет идеальный смысл. Вам не нужно начать их с подчеркиванием »
_
" персонаж. Мы делаем это, потому что он отмечает их как что-то из обычного в вашем сценарии.
Простые примеры
Вы можете использовать здесь документы в командной строке и в сценариях. Когда вы вводите следующие в окне терминала, вы увидите «
& gt;
«Запрос продолжения линии каждый раз, когда вы попадаете в« Ввод ». Когда вы вводите «_End_of_text» Limit String и нажмите «Enter», - передается список веб-сайтов
Кот,
И они отображаются в окне терминала.
Cat & Lt; _end_of_text. Как к гике Обзор Geek. Лейпаввый Cloudsavvy это Разумно _end_of_text
Это не самая ценность упражнений, но он демонстрирует, что ничто не отправляется в команду, пока весь список данных не столкнутся, и ограничительная строка не встречается. То
Кот
Команда не получает никакого ввода, пока не входите в предел строки «_END_OF_TEXT» и нажмите клавишу «Enter».
Мы можем сделать то же самое в сценарии. Введите или скопируйте этот пример в редактор, сохраните файл как «heredoc-1.sh» и закройте редактор.
#! / Bin / Bash Cat & Lt; & lt; "_end_of_text" Ваше имя пользователя: $ (WHOAMI) Ваш текущий рабочий каталог: $ PWD Ваша версия Bash: $ bash_version _end_of_text
Когда вы следуете этой статье, каждый раз, когда вы создаете скрипт, вам нужно
сделать его исполняемым
прежде чем он будет работать. В каждом случае,
использовать
камин
команда
Отказ Замените имя скрипта в каждом примере для имени сценариев, используемого здесь.
chmod + x heredoc-1.sh
Этот скрипт содержит два переменных среды,
$ PWD.
а также
$ Bash_version.
Отказ Имена переменных окружающей среды заменены их значениями данных - текущий рабочий каталог и версию Bash - когда выполняется скрипт.
Сценарий также использует
замена команд
на
то
кто я
команда
Отказ Имя команды заменяется на свой свой выход. Вывод от всего сценария записывается в окно терминала по команде CAT. Мы запускаем скрипт, вызвав его по имени:
./ heredoc-1.sh
Если вы измените скрипт и оберните предельную строку в первой строке документа здесь в кавычках »
"
«Список данных передан в команду Document Tocument 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
кот & lt; & lt; - _end_of_text
Ваше имя пользователя: $ (WHOAMI)
Ваш текущий рабочий каталог: $ PWD
Ваша версия Bash: $ bash_version
_end_of_text
./ heredoc-3.sh
Вкладки игнорируются. Это может показаться тривиальным, но это аккуратный способ справиться с ведущими вкладками из-за отступов секций скриптов.
Петли и другие логические конструкции обычно отступаются. Если ваш здесь документ содержится в разделе «Скриптор» сценария, используя Dash »
-
«С оператором перенаправления удаляет проблемы форматирования, вызванные ведущими символами вкладки.
#! / Bin / Bash если правда; тогда кот & 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.txt. Ваше имя пользователя: $ (WHOAMI) Ваш текущий рабочий каталог: $ PWD Ваша версия Bash: $ bash_version _end_of_text
./ heredoc-4.sh
SEASES CAT.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 статья = «Здесь документы» почтет -ный рабочей нагрузка статус 'Дэйв & л; & л; _отчет о проекте Имя пользователя: $ (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
Странное имя, Аккуратные Особенности
Здесь документы причудливые, но мощные, особенно при использовании для отправки команд на удаленный компьютер. Было бы простое значение для сценария резервной копии, используя
rsync.
Отказ Затем скрипт может подключиться к удаленному компьютеру, проверяйте оставшееся место для хранения и отправляйте оповещение электронной почты, если пространство становится низким.
СВЯЗАННЫЕ С: Как создать резервную копию системы Linux с rsync