Search code examples
bashshell

What does "cat > somefilename <<EOF" (particularly, the greater-than and double less-than symbols) do in shell?


Just came across the following command:

cat > myspider.py <<EOF

But I'm not sure of the use of > and <<.


Solution

  • <<EOF is the start of a heredoc. Content after this line and prior to the next line containing only EOF is fed on stdin to the process cat.

    > myspider.py is a stdout redirection. myspider.py will be truncated if it already exists (and is a regular file), and output of cat will be written into it.

    Since cat with no command-line arguments (which is the case here because the redirections are interpreted as directives to the shell on how to set up the process, not passed to cat as arguments) reads from its input and writes to its output, the <<EOF indicates that following lines should be written into the process as input, and the >myspider.py indicates that output should be written to myspider.py, this thus writes everything up to the next EOF into myspider.py.


    See: