On Sun, 2005-08-28 at 22:43, Jeff Vian wrote: > > > > > > cat > /etc/sysconfig/desktop << EOF > > > > > > DESKTOP="KDE" > > > > > > DISPLAYMANAGER="KDE" > > > > > > EOF > > > > > > > > Cat copies input to output ................ > > > Thanks for your explanation. I had taken Tony's suggestion and started looking > > > at the man bash pages. So, if I'm getting it right, the above sequence says > > > take what I'm about to type and redirect the text into the file 'desktop' in > > > the designated location, and keep doing that until I type "EOF" - the first > > > '>' is the redirect, and the '<<' is the entry that tells the process to > > > continue until it sees the sequence that immediately follows '<<', at which > > > point the redirect process terminates. Do I have that right? > > > > Yes, but note that it is the shell collecting the input when > > you use this construction, then feeding it to cat. If you > > just: > > cat >file > > type...type > > type.. > > control-d > > cat inherits your keybord as it's stdin, and a special case > > for tty type inputs is that control-d as the first thing > > after a newline generates an end-of-file as seen by the > > reading program (controlled by "stty"). > > > > This is true, but the control-d is the universal eof input for many > apps. This is the true eof character and makes things operate as if > they actually read an eof (as they would if input were from a file and > processing continued to the end of file). Close, but not quite. Apps never see a control-d and know nothing about its use as the eof character from the keyboard. Programs doing an unbuffered read() see 0 characters returned; programs using getc() receive the out-of-band EOF value. It is the tty subsystem that converts the control-d input after a newline to an eof condition when running in "cooked" mode. > The most common usage of cat > in fact is to display the contents of a file and that terminates when > the eof is reached/read, thus the 'cat' process terminates when given a > control-d whether from stdin or from a file. Or a pipe, which also generates an eof condition to the reader when the writing side is closed and the contents have been consumed. > In the example above with the line > cat > /etc/sysconfig/desktop << EOF > it is telling the shell to allow cat to continue processing until it > reads a literal string with the three characters "EOF". In this usage > format, when the "EOF" is seen the shell sends a literal eof character > (control-d) to the cat process (cat never actually sees the string EOF). > > While the functionality is similar the means is totally different. In the last case, the shell starts cat with stdin connected to a pipe, send the data up to the text EOF in the shell input into the pipe, then closes the writing side of the pipe. -- Les Mikesell lesmikesell@xxxxxxxxx