cat file | command
Синтаксис считается Ненужное использованиеCat
. Из всех ваших вариантов, он требует снижения производительности, потому что он должен порождать другой процесс в ядре. Каким бы незначительным это ни оказалось в общей картине, это накладные расходы, которых нет у других форм. Это было рассмотрено на такие вопросы, как: Должен ли я заботиться о ненужных кошек?
Между двумя другими формами практически нет различий в производительности. STDIN - это специальный файловый узел, который процесс должен открывать и читать, как и любой другой. Передача имени файла вместо STDIN просто делает его открытым другим файлом.
Разница будет в том, какие функции / гибкость вы ищете.
- Передача имени файла в программу будет означать, что входной файл доступен для поиска. Это может иметь или не иметь значения для программы, но некоторые операции могут быть ускорены, если поток доступен для поиска.
- Знание фактического входного файла позволяет вашей программе потенциально писать в него. Например,
sed -i
для редактирования на месте. (Примечание: поскольку для этого необходимо создать новый файл за кулисами, это не выигрыш в производительности по сравнению с другими перенаправлениями, но это удобный шаг.)
- Использование перенаправления оболочки дает вам возможность объединить несколько файлов или даже использовать перенаправление процесса.
sed [exp] < file1 file2
или даже sed [exp] < <(grep command)
. Подробности этого варианта использования можно найти по этому вопросу: Замена процесса и канал