Both the Bourne shell and the C shell support multiline commands. In the Bourne shell, a newline following an open quote (
'
or
"
),
a pipe symbol (
|
), or a backslash (
\
) will not cause the command to be executed. Instead, you'll get a secondary prompt (from the
PS2
environment variable, set to
>
by default) and you can continue the command on the next line. For example, to send a quick
write
(
1.33
)
message without making the other user wait for you to type the message:
$echo "We're leaving in 10 minutes. See you downstairs." |
>write joanne
In the C shell, you can continue a line by
typing a backslash (
\
) before the newline (
8.15
)
. You won't get the secondary prompt.
Obviously, this is a convenience if you're typing a long command line. It is a minor feature and one easily overlooked; however, it makes it much easier to use a program like sed ( 34.24 ) from the command line. For example, if you know you chronically make the typos "mvoe" (for "move") and "thier" (for "their"), you might be inspired to type the following command:
nroff lp |
$ |
---|
More importantly, the ability to issue multiline commands lets you use the shell's programming features interactively from the command line. In both the Bourne and the C shell, multiline programming constructs automatically generate a secondary prompt (
>
in the Bourne shell,
?
in the C shell) until the construct is completed.
For example, here's a place to use my favorite programming construct for non-programmers, the for loop ( 9.12 ) :
$for x in file1 file2 file3
>do
>sed 's/thier/their/g' $x > ,$x
>mv ,$x $x
>done
$
Or in the C shell with foreach ( 9.11 ) :
%foreach x (file1 file2 file3)
?sed 's/thier/their/g' $x > ,$x
?mv ,$x $x
?end
%
While a simple command like this could be saved into a shell script ( 1.5 ) , it is often even easier to use it interactively.
Users of sed should of course makesure their script works correctly before overwritingtheir original file . ( 34.3 )
-