The
here document operator << (8.18)
is used in shell scripts.
It tells the shell to take lines from the script as standard input to a command.
The example below shows
a loop (45.17)
that prints three nasty form letters with the
lpr (43.2)
command.
Each letter has a different person's name and the current date at the top.
You can put this loop into a
shell script (44.2)
or just type it in
at a Bourne shell prompt (9.12, 9.13).
Each line of the loop body starts with a TAB character, which the
<<- operator removes before the printer gets the text:
for person in "Mary Smith" "Doug Jones" "Alison Eddy" do lpr <<- ENDMSG `date` Dear $person, This is your last notice. Buy me pizza tonight or else I'll type "rm -r *" when you're not looking. This is not a joak. Signed, The midnight skulker ENDMSG done
| Warning! | This loop runs three lpr commands; each form letter prints on a
separate page.
The shell reads the standard input until it finds the
terminator word, which in this case is ENDMSG.
The word (ENDMSG) has to be on a line all by itself.
(Some Bourne shells don't have the<<-operator to remove
leading TAB characters.
In that case, use<<and don't indent the loop body.)
The
backquotes (9.16)
run the
date (51.10)
command and output its date;$personis replaced with the person's name set at the top of the
loop.
The rest of the text is copied as is to the standard input of the lpr
command. | 
|---|
-