Linux here is document

Here (Heredoc) в Bash

При написании сценариев оболочки вы можете оказаться в ситуации, когда вам нужно передать многострочный блок текста или кода интерактивной команде, такой как tee , cat или sftp .

В Bash и других оболочках, таких как Zsh, документ Here (Heredoc) — это тип перенаправления, позволяющий передавать команде несколько строк ввода.

Синтаксис HereDoc

Синтаксис написания HereDoc имеет следующий вид:

[COMMAND] [-] 'DELIMITER' HERE-DOCUMENT DELIMITER 
  • Первая строка начинается с необязательной команды, за которой следует специальный оператор перенаправления
  • В качестве идентификатора-разделителя можно использовать любую строку, наиболее часто используемые — EOF или END.
  • Если ограничивающий идентификатор не заключен в кавычки, оболочка заменит все переменные, команды и специальные символы перед передачей команд здесь строк документа.
  • Добавление знака минус к оператору перенаправления

Основные примеры Heredoc

В этом разделе мы рассмотрим несколько основных примеров использования heredoc.

Heredoc чаще всего используется в сочетании с командой cat .

В следующем примере мы передаем в cat две строки текста, содержащие переменную среды и команду, используя здесь документ.

cat  The current working directory is: $PWD You are logged in as: $(whoami) EOF 

Как видно из вывода ниже, подставляются как переменная, так и вывод команды:

The current working directory is: /home/linuxize You are logged in as: linuxize 

Посмотрим, что будет, если мы заключим разделитель в одинарные или двойные кавычки.

cat "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF 

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

The current working directory is: $PWD You are logged in as: $(whoami) 

Если вы используете heredoc внутри оператора или цикла, используйте операцию перенаправления

if true; then cat  Line with a leading tab. EOF fi 

Вместо отображения вывода на экране вы можете перенаправить его в файл с помощью операторов > , >> .

cat  file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF 

Если файл file.txt не существует, он будет создан. При использовании > файл будет перезаписан, а символ >> добавит вывод в файл.

Вход heredoc также может быть передан по конвейеру. В следующем примере команда sed заменит все экземпляры символа l на e :

Чтобы записать передаваемые данные в файл:

cat  file.txt Hello World EOF 

Использование Heredoc с SSH

Использование Heredoc — один из самых удобных и простых способов выполнения нескольких команд в удаленной системе через SSH .

При использовании разделителя без кавычек убедитесь, что вы экранировали все переменные, команды и специальные символы, иначе они будут интерполированы локально:

ssh -T [email protected]  echo "The current local working directory is: $PWD" echo "The current remote working directory is: $PWD" EOF 
The current local working directory is: /home/linuxize The current remote working directory is: /home/user 

Вы также можете настроить аутентификацию на основе ключа SSH и подключаться к своим серверам Linux без ввода пароля.

Выводы

В этом руководстве вы узнали, что такое heredoc и как использовать его в сценариях оболочки.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Источник

Here Document And Here String in Bash on Linux

Bash is a Unix shell and command language that is commonly used in Linux and other Unix-based operating systems. It is a powerful tool for automating tasks, managing system configurations and performing various other operations on a Unix-based system. Bash provides several features that make it a powerful and flexible tool for users, including support for «here documents» and «here strings.«

What is a “Here Document”?

A “here document”, also known as a «here doc», is a special type of input redirection that allows a user to specify multiple lines of input for a command. This is particularly useful for specifying long blocks of text or script code as input to a command.

In this example, the delimiter is «EOF» (which stands for «End of File»). The lines of input are specified between the delimiter and the terminating line containing only the delimiter. When the command is executed, the cat command reads the input and displays it on the screen.

“Here documents” can also be used to specify input for commands that take script code as input, such as awk or perl. For example, the following command uses a here document to specify a script for the awk command −

In this example, the awk command will read the input and execute the script specified in the here document, which simply prints the first field (such as column) of each line of input.

What is a Here String?

“Here strings” are specified using a single-quote followed by a delimiter, which can be any string. The string is then specified after the delimiter and is terminated by a line containing only the delimiter, followed by a single-quote. For example, the following command uses a here string to specify a multi-line string as input for the echo command −

$ echo 'This is a string that spans multiple lines.'

In this example, the delimiter is the single-quote itself. The string is specified between the delimiter and the terminating line containing only the delimiter. When the command is executed, the echo command reads the input and displays it on the screen as a single string.

Here strings can also be used to specify input for commands that take script code as input, such as awk or perl. For example, the following command uses a here string to specify a script for the awk command −

In this example, the awk command will read the input and execute the script specified in the here string, which sets the field separator to a colon (:) and then prints the first field of each line of input.

Using “Here Documents” and “Here Strings”

“Here documents” and “here strings” can be useful in a variety of situations when working with Bash. Some common use cases include −

  • Specifying long blocks of text or script code as input to a command.
  • Creating scripts or commands that are easier to read and maintain by breaking them up into multiple lines.
  • Simplifying the process of specifying input for commands that require multiple lines of input.

Here is an example of a script that uses a “here document” to create a new file and write some text to it

#!/bin/bash # Create a new file called "output.txt" cat > output.txt 

This script uses the cat command with the > operator to redirect output to a new file called "output.txt". The here document is then used to specify the text that should be written to the file. When the script is executed, the cat command writes the text specified in the here document to the "output.txt" file.

Here is an example of a script that uses a here string to pass a multi-line string as an argument to the grep command −

#!/bin/bash # Search for a pattern in a multi-line string grep 'pattern' 'line 1 line 2 line 3'

In this example, the grep command searches for the string "pattern" in the multi-line string specified in the here string. If the string is found, the grep command will print the matching line or lines to the screen.

Conclusion

“Here documents” and “here strings” are useful features in Bash that allow a user to specify multiple lines of input for a command. They can be used to specify long blocks of text or script code as input or to simplify the process of specifying input for commands that require multiple lines of input. By using here documents and here strings, users can create scripts and commands that are easier to read and maintain, and can automate various tasks on a Unix-based system more effectively.

Источник

Bash Heredoc

Favorite

Добавить в избранное

Bash Heredoc

П ри написании сценариев оболочки вы можете оказаться в ситуации, когда вам нужно передать многострочный блок текста или кода интерактивной команде, такой как tee, cat или sftp.

В Bash и других оболочках, таких как Zsh, документ Here (Heredoc) — это тип перенаправления, который позволяет передавать в команду несколько строк ввода.

Синтаксис написания HereDoc принимает следующую форму:

  • Первая строка начинается с необязательной команды, за которой следует специальный оператор перенаправления
  • Вы можете использовать любую строку в качестве идентификатора-разделителя, чаще всего используются EOF или END.
  • Если идентификатор разделителя не заключен в кавычки, оболочка подставит все переменные, команды и специальные символы перед передачей строк здесь документа в команду.
  • Добавление знака минуса к оператору перенаправления

Основные примеры Heredoc

В этом разделе мы рассмотрим некоторые основные примеры использования heredoc.

Heredoc чаще всего используется в сочетании с командой cat.

В следующем примере мы передаем две строки текста, содержащие переменную окружения и команду cat, используя документ here.

Как видно из вывода ниже, переменная и команда заменяются:

Текущий рабочий каталог: /home/andreyex Вы вошли как: andreyex

Посмотрим, что произойдет, если мы заключим разделитель в одинарные или двойные кавычки.

Вы можете заметить, что когда в качестве разделителя указывается в кавычках, расширение параметров не выполняется, а подстановка команд выполняется оболочкой.

Текущий рабочий каталог: $PWD Вы вошли как: $(whoami)

Если вы используете heredoc внутри оператора или цикла, используйте операцию перенаправления

Строка с ведущей вкладкой.

Вместо отображения вывода на экране вы можете перенаправить его в файл , используя оператор >, >>.

cat file.txt Текущий рабочий каталог: $PWD Вы вошли как: $(whoami) EOF

Если файл file.txt не существует, он будет создан. При использовании > файл будет перезаписан, в то время как >> файл будет добавлен в файл.

Ввод heredoc также может быть передан по конвейеру. В следующем примере команда sed заменит все вхождения lсимвола на e:

Чтобы записать данные в файл:

cat file.txt Hello World EOF

Использование Heredoc с SSH

Использование Heredoc — это один из самых удобных и простых способов выполнения нескольких команд в удаленной системе через SSH.

При использовании разделителя без кавычек убедитесь, что вы экранировали все переменные, команды и специальные символы, иначе они будут интерполированы локально

Текущий локальный рабочий каталог: /home/andreyex Текущий удаленный рабочий каталог: /home/user

Вы также можете настроить аутентификацию на основе ключей SSH и подключаться к серверам Linux без ввода пароля.

Заключение

Из этой статьи вы узнали, что такое heredoc и как его использовать в сценариях оболочки.

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник

Читайте также:  Linux mint команды консоли
Оцените статью
Adblock
detector