Hi I have a lab header called header.txt and I want to cat into my 3 C files
cat ../header.txt > find -name *.c
What is wrong with the above statement?>
The I/O redirection operators <, >, etc. all only take one word as their argument, and use that as a filename. Anything else is considered part of the command line.
So when you run this:
cat ../header.txt > find -name *.c
It's exactly the same as this:
cat ../header.txt -name *.c > find
That's probably not going to do anything useful.
Another problem: your *.c isn't escaped or quoted, so bash will expand it rather than passing it to find.
You can do what you seem to want with tee, which accepts any number of arguments:
cat ../header.txt | tee *.c
And then you don't even need cat any more, really.
tee *.c < ../header.txt
Of course, you could just as well do this with cp. Perhaps you meant to append to these files? If so, pass -a to tee as well.
Interesting trivia: zsh and some other shells will let you have multiple > operators, which works just like tee. (Multiple < is also allowed and works like cat.)
cat infile > outfile1 > outfile2
But you have to actually list every file individually, so you can't use this shortcut with a glob like *.c.