Как использовать «здесь документы» в 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, 2024

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


Как заставить пользователей изменить свои пароли на Linux

Linux, Nov 4, 2024

Илья Titchev / Shutterstock Пароли являются Keystone для обеспечения безопасности учетной записи. Мы..


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

Linux, Jul 30, 2025

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


Как выйти из вашего Mac с помощью терминала

Linux, Aug 8, 2025

Apple позволяет легко выйти из вашего Mac с опцией в строке меню рабочего стола. Но есть также пара команд,..


Как откатить ядро ​​в Linux

Linux, Sep 30, 2025

Fatmawati Achmad Zaenuri / ShuttTerstick.com Если ваш ПК Linux внезапно возникнет проблемы после обновления ..


Как запустить приложения для Android на Linux

Linux, Oct 19, 2025

тишины / ShuttTerstock.com. Вы когда-нибудь хотели запустить приложение для Android на Linux, но не хот..


Как найти PID процесса Linux с Pidof или PGREP

Linux, Nov 15, 2024

Работа с процессом Linux часто означает знание его идентификатора процесса или PID. Это уникальное число, дан..


Как иметь дело с пробелами в именах файлов на Linux

Linux, Dec 14, 2024

Как и большинство операционных систем, Linux поддерживает имена файлов с пробелами в них. Но использование �..


Категории