Как использовать Heredoc в Bash в Linux

12 set 2022 2 min di lettura
Как использовать Heredoc в Bash в Linux
Indice dei contenuti

Введение

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

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

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

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

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

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

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

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

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

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

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

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

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 <<- EOF
 Line with a leading tab.
 EOF
 fi
Line with a leading tab.

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

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

Если файл.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

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

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

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

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

Вывод

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

Buy me a coffeeBuy me a coffee

Supportaci se ti piacciono i nostri contenuti. Grazie.

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.