Поиск по сайту:
Все искусство управления состоит в искусстве быть честным (Т. Джефферсон).

Bash Heredoc

16.05.2019
Bash Heredoc

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

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

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

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

 

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

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

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

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

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

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

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

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

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

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

Если вы используете heredoc внутри оператора или цикла, используйте операцию перенаправления <<-, которая позволяет сделать отступ в вашем коде.

if true; then
    cat <<- EOF
    Строка с ведущей вкладкой.
    EOF
fi
Строка с ведущей вкладкой.

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

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

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

Читать  Команда brew не найдена

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

cat <<'EOF' |  sed 's/l/e/g'
Hello
World
EOF
Heeeo
Wored

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

cat <<'EOF' |  sed 's/l/e/g' > file.txt
Hello
World
EOF

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

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

ssh -T user@host.com << EOF
echo "Текущий локальный рабочий каталог: $PWD"
echo "Текущий удаленный рабочий каталог: \$PWD"
EOF
Текущий локальный рабочий каталог: /home/andreyex
Текущий удаленный рабочий каталог: /home/user

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

 

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

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

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

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (2 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:


0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно


Рекомендуемое
В этой статье вы узнаете, как обрезать файл журнала и…

Спасибо!

Теперь редакторы в курсе.