Ныне от одного мудреца больше требуется, чем в древности от семерых (Б. Грасиан).

Bash Heredoc

3 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
16 мая 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 не существует, он будет создан. При использовании > файл будет перезаписан, в то время как >> файл будет добавлен в файл.

Ввод 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.

Просмотров: 73

Если статья понравилась, то поделитесь ей в социальных сетях:

Отправить ответ

Войти с помощью: 
avatar
  Подписаться  
Уведомление о

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить
galka

Спасибо! Ваша заявка принята

close
galka

Спасибо! Ваша заявка принята

close