<Попередній | зміст | Наступна>
Тут Документи
Ми розглянули два різні способи виведення нашого тексту, обидва за допомогою нудьгувати ком-
манд. Існує третій спосіб, який називається а тут документ or тут сценарій. Документ тут — це додаткова форма перенаправлення вводу-виводу, у якій ми вставляємо текст у наш скрипт і вводимо його в стандартне введення команди. Це працює так:
команда << знак
текст
знак
де команда це ім'я команди, яка приймає стандартний вхід і знак це рядок, який використовується для позначення кінця вбудованого тексту. Ми модифікуємо наш сценарій, щоб використовувати наведений тут документ:
#! / бін / баш
# Програма для виведення сторінки системної інформації
TITLE="Звіт про системну інформацію для $HOSTNAME" CURRENT_TIME=$(дата +"%x %r %Z")
TIMESTAMP="Створено $CURRENT_TIME, $USER"
кіт << _EOF_
$TITLE
$TITLE
$TIMESTAMP
_EOF_
#! / бін / баш
# Програма для виведення сторінки системної інформації
TITLE="Звіт про системну інформацію для $HOSTNAME" CURRENT_TIME=$(дата +"%x %r %Z")
TIMESTAMP="Створено $CURRENT_TIME, $USER"
кіт << _EOF_
$TITLE
$TITLE
$TIMESTAMP
_EOF_
Замість використання нудьгувати, зараз використовує наш сценарій як і тут документ. Нитка _EOF_ (що означає «кінець файлу», загальна умова) було обрано як маркер і позначає кінець вбудованого тексту. Зауважте, що токен повинен з’являтися окремо, а в рядку не повинно бути пробілів.
Отже, яка перевага використання тут документа? Це переважно те саме, що нудьгувати, за винятком того, що за замовчуванням одинарні та подвійні лапки в цих документах втрачають своє особливе значення для оболонки. Ось приклад командного рядка:
[me@linuxbox ~]$ foo="якийсь текст"
[me@linuxbox ~]$ кіт << _EOF_
> $foo
[me@linuxbox ~]$ foo="якийсь текст"
[me@linuxbox ~]$ кіт << _EOF_
> $foo
> "$foo"
> '$foo'
> \$foo
> _EOF_ деякий текст "якийсь текст" "якийсь текст"
$foo
> "$foo"
> '$foo'
> \$foo
> _EOF_ деякий текст "якийсь текст" "якийсь текст"
$foo
Як бачимо, оболонка не звертає уваги на лапки. Він ставиться до них як до звичайних персонажів. Це дозволяє нам вільно вставляти цитати в документ тут. Це може виявитися зручним для нашої програми звітів.
Тут документи можна використовувати з будь-якою командою, яка приймає стандартне введення. У цьому прикладі ми використовуємо документ here для передачі серії команд до FTP програма для отримання файлу з віддаленого FTP-сервера:
#! / бін / баш
# Скрипт для отримання файлу через FTP FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n << _EOF_ відкрити $FTP_SERVER
анонімний користувач me@linuxbox cd $FTP_PATH
мішанина
отримати $REMOTE_FILE до побачення
_EOF_
ls -l $REMOTE_FILE
#! / бін / баш
# Скрипт для отримання файлу через FTP FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n << _EOF_ відкрити $FTP_SERVER
анонімний користувач me@linuxbox cd $FTP_PATH
мішанина
отримати $REMOTE_FILE до побачення
_EOF_
ls -l $REMOTE_FILE
Якщо ми змінимо оператор переспрямування з «<<» на «<<-», оболонка ігноруватиме провідні символи табуляції в документі тут. Це дозволяє зробити відступ у документі, що може покращити читабельність:
#! / бін / баш
# Скрипт для отримання файлу через FTP FTP_SERVER=ftp.nl.debian.org
#! / бін / баш
# Скрипт для отримання файлу через FTP FTP_SERVER=ftp.nl.debian.org
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n <<- _EOF_ відкрити $FTP_SERVER
анонімний користувач me@linuxbox cd $FTP_PATH
мішанина
отримати $REMOTE_FILE до побачення
_EOF_
ls -l $REMOTE_FILE
FTP_PATH=/debian/dists/lenny/main/installer-i386/current/images/cdrom REMOTE_FILE=debian-cd_info.tar.gz
ftp -n <<- _EOF_ відкрити $FTP_SERVER
анонімний користувач me@linuxbox cd $FTP_PATH
мішанина
отримати $REMOTE_FILE до побачення
_EOF_
ls -l $REMOTE_FILE