The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Поиск:  Каталог документации

3.22. Here Documents

A here document is a way of feeding a command script to an interactive program, such as ftp, telnet, or ex. Typically, it consists of a command list to the program, delineated by a limit string. The special symbol << precedes the limit string. This has the same effect as redirecting the output of a file into the program, that is,
interactive-program < command-file
where command-file contains
command #1
command #2

The "here document" alternative looks like this:
interactive-program <<LimitString
command #1
command #2

Choose a limit string sufficiently unusual that it will not occur anywhere in the command list and confuse matters.

Note that "here documents" may sometimes be used to good effect with non-interactive utilities and commands.

Example 3-75. dummyfile: Creates a 2-line dummy file


# Non-interactive use of 'vi' to edit a file.
# Emulates 'sed'.

if [ -z $1 ]
  echo "Usage: `basename $0` filename"
  exit 1


vi $TARGETFILE <<x23LimitStringx23
This is line 1 of the example file.
This is line 2 of the example file.

# Note that ^[ above is a literal escape
# typed by Control-V Escape

exit 0

The above script could just as effectively have been implemented with ex, rather than vi. Here documents containing a list of ex commands are common enough to form their own category, known as ex scripts.

Example 3-76. broadcast: Sends message to everyone logged in


wall <<zzz23EndOfMessagezzz23
Dees ees a message frrom Central Headquarters:
Do not keel moose!
# Other message text goes here.
# Note: Comment lines printed by 'wall'.

# Could have been done more efficiently by
# wall <message-file

exit 0

Example 3-77. Multi-line message using cat


# 'echo' is fine for printing single line messages,
#  but somewhat problematic for for message blocks.
#  A 'cat' here document overcomes this limitation.

cat <<End-of-message
This is line 1 of the message.
This is line 2 of the message.
This is line 3 of the message.
This is line 4 of the message.
This is the last line of the message.

exit 0

Example 3-78. upload: Uploads a file pair to "Sunsite" incoming directory


# upload
# upload file pair (filename.lsm, filename.tar.gz)
# to incoming directory at Sunsite

if [ -z $1 ]
  echo "Usage: `basename $0` filename"
  exit 1

Filename=`basename $1`
# Strips pathname out of file name

# These need not be hard-coded into script,
# may instead be changed to command line argument.

# Change above to suit.

ftp -n $Server <<End-Of-Session
# -n option disables auto-logon

user anonymous $Password
# Ring 'bell' after each file transfer
cd $Directory
put $Filename.lsm
put $Filename.tar.gz

exit 0

Note: Some utilities will not work in a "here document". The pagers, more and less are among these.

For those tasks too complex for a "here document", consider using the expect scripting language, which is specifically tailored for feeding input into non-interactive programs.

Inferno Solutions
Hosting by

Закладки на сайте
Проследить за страницей
Created 1996-2022 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру