5

This question already has an answer here:

What's the difference between these two commands?

cat /proc/uptime | awk '{print $1}'

< /proc/uptime awk '{print $1}'

Specifically, how does the second command work? Doesn't the redirection operator < has to be accompanied by a command? What does it mean to redirect the contents of a file like that?

marked as duplicate by Kusalananda, msp9011, Thomas Dickey, Jeff Schaller, Archemar Sep 3 '18 at 13:15

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

5

In general, foo < bar and < bar foo are equivalent in bash scripting. Any time < filename is processed by the shell, it means that the command it's associated with will have its standard input come from that file. No extra command or process is involved with this; the shell does it itself.

Running cat filename reads the contents of the specified file and writes them to standard output. | between two commands means connect standard output of the left command to standard input of the right command.

Thus, both of your commands have the same effect of sending the contents of /proc/uptime to awk, but the first way starts an extra cat process to do so.

Not the answer you're looking for? Browse other questions tagged or ask your own question.