Как использовать «здесь документы» в Bash на Linux

Mar 31, 2025
Linux,
Fatmawati Achmad Zaenuri / Shutterstock

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


Linux, - Самые популярные статьи

Как убить процессы зомби на Linux

Linux, Nov 25, 2025

Fatmawati Achmad Zaenuri / Shutterstock Программы, которые плохо написаны или выполняют плохо, могут уйт�..


Как использовать расширение скобки в раковине BASH Linux

Linux, May 12, 2025

Fatmawati Achmad Zaenuri / Shutterstock Расширение Brace - это полезная техника для генерации списков строк..


Как обновить Arch Linux

Linux, Jul 30, 2025

Проект Ubuntu Пришло время обновить свою систему Arch Linux? Будь вы на чистой арке или в арке ..


5 Специализированные Linux дистрибутивов с уникальными свойствами

Linux, Jul 20, 2025

Чтение сквозь мультяшный длинный список существующих дистрибунов Linux, вкусы Saupdry и выключенные стрель�..


Что такое «root» на Linux?

Linux, Jul 7, 2025

Fatmawati Achmad Zaenuri / ShuttTerstick.com Пользователь root - самый мощный объект в вселенной Linux с неогра..


Лучшие ноутбуки Linux 2021 для разработчиков и энтузиастов

Linux, Sep 27, 2025

Tomeqs / ShuttTerstock.com. Что искать в ноутбуке Linux в 2021 году Вы можете купить почти любой н�..


Этот новый игровой ноутбук Linux имеет спецификации, чтобы запускать все

Linux, Oct 20, 2025

Juno Computers. Linux и Gaming начинают собираться вместе в последнее время. То Паровая палуба нах�..


Какова эпоха Unix и как работает Unix Time?

Linux, Nov 10, 2025

Михаил Леонов / Shutterstock UNIX хранит время как количество секунд с 1 января 1970 года. И это оз�..


Категории