Meglio evitare il gatto; scrivilo in questo modo se la modifica della riga è importante:
$ < filename grep pattern
Il motivo è che spingere tutti i dati attraverso cat costa memoria e risorse della CPU. Un altro vantaggio di passare il nome file come argomento piuttosto che reindirizzare stdin è che consente al comando l'opzione mmap() sul file.
Non posso credere che nessuno abbia ancora fatto riferimento a "Uso inutile di Cat" http://www.smallo.ruhr.de/award.html
C'è un vantaggio discutibile. Se hai una pipeline lunga, sembra un po' più ortogonale con cat:
cat file | command1 | command 2 | command3
Raggruppa tutti i comandi insieme.
Naturalmente, come altri hanno detto (e lo faccio)
< file command1 | command2 | command3
Esegue praticamente la stessa cosa. Detto questo, cat è piuttosto piccolo e non farà cadere il tuo computer se lo usi quando non ne hai davvero bisogno.
Normalmente si usa cat
vs colpire direttamente un file non cambia nulla, ma fa la differenza per alcuni comandi che si preoccupano se ci sono più file come argomenti, come grep
. Caso in questione:
cat file1 file2 | grep SOMETHING
avrà un output diverso da
grep SOMETHING file1 file2
Che avrà i nomi di file corrispondenti nell'output. Ci sono volte in cui non voglio i nomi dei file, ed è un vantaggio usare cat
.
Non c'è alcun vantaggio. Anche il tuo cursore alla fine non ha molta importanza se invece lo strutturi in questo modo:< inputfile grep -args foo