Je lepší se vyhnout kočce; napište to takto, pokud na úpravě řádku záleží:
$ < filename grep pattern
Důvodem je, že protlačení všech dat přes cat stojí paměť a zdroje CPU. Další výhodou předávání názvu souboru jako argumentu spíše než přesměrování stdin je to, že umožňuje příkazu možnost mmap() souboru.
Nemůžu uvěřit, že se ještě nikdo nezmínil o "Useless Use of Cat" http://www.smallo.ruhr.de/award.html
Je tu jedna sporná výhoda. Pokud máte dlouhé potrubí, vypadá to trochu ortogonálněji s cat:
cat file | command1 | command 2 | command3
Seskupuje všechny příkazy dohromady.
Samozřejmě, jak řekli ostatní (a já to dělám)
< file command1 | command2 | command3
Provádí v podstatě to samé. To znamená, že kočka je docela malá a nezničí váš počítač, pokud jej používáte, když to opravdu nepotřebujete.
Normálně pomocí cat
vs přímým zásahem do souboru se nic nezmění, ale udělá rozdíl pro určité příkazy, které se starají o to, zda existuje více souborů jako argumentů, například grep
. Příklad:
cat file1 file2 | grep SOMETHING
bude mít jiný výstup než
grep SOMETHING file1 file2
Které budou mít ve výstupu odpovídající názvy souborů. Jsou chvíle, kdy nechci názvy souborů, a použití cat
je výhodou .
Neexistuje žádná výhoda. Váš kurzor na konci také moc nezáleží, pokud jej místo toho strukturujete takto:< inputfile grep -args foo