Android

Баш Эредок

rytp барбоскины без мата VIDEOMEGA RU

rytp барбоскины без мата VIDEOMEGA RU

Оглавление:

Anonim

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

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

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

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

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

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

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

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

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

cat << EOF 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)

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

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

Использование 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/linuxize The current remote working directory is: /home/user

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

Вывод

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

терминал bash