Like a lot of people, he overuses cat when it's not needed. `cat FOO | more` is approximately equivalent to `more < FOO`, except the first one spawns an extra process for no reason.
> except the first one spawns an extra process for no reason.
I wonder how many processes I could spin up in the time it would take for me to figure out "hmm, no, invoking that command would use one more process than necessary..."
I don't give a hoot about that stuff when I'm doing stuff interactively. e.g. when using `more`.
In my opinion it's better to replace `cat FOO | more` with `< FOO more`, because cat is used because people first think that they want to take contents of some file and pass it through some filter.
I didn't know you could put the redirection first. You learn something new every day. Maybe that form would make it more mnemonic for some people, because it more resembles a pipeline.
BTW, the authors effectively embraced having the functionality of using `cat` instead of < .
> The use of cat to feed a single input file to a program has to some degree superseded the shell’s < operator, which illustrates that general-purpose constructs - like cat and pipes - are often more natural than convenient special-purpose ones.
If you're going to write shell scripts or do anything sophisticated with the shell, it's worth understanding the difference. And there is a fundamental difference. With |, standard input is hooked up to a pipe. With <, standard input is hooked up directly to the file. Sometimes it does matter.
I wonder how many processes I could spin up in the time it would take for me to figure out "hmm, no, invoking that command would use one more process than necessary..."
I don't give a hoot about that stuff when I'm doing stuff interactively. e.g. when using `more`.