Когда следует использовать перенаправление ввода?

Для получения тех же результатов я использовал следующие две команды:

[root@localhost ~]# grep line comments The line should start with a single quote to comment in VB scripting. Double slashes in the beginning of the line for single line comment in C. [root@localhost ~]# [root@localhost ~]# grep line <comments The line should start with a single quote to comment in VB scripting. Double slashes in the beginning of the line for single line comment in C. [root@localhost ~]# 

Может ли кто-нибудь объяснить мне какие-либо плюсы и минусы, если какой-либо из этих двух подходов друг к другу.

  • перенаправить в тот же файл, что и исходный файл, обработанный командой
  • Почему перенаправление STDERR на / dev / null выполняется таким образом?
  • Восстановление вывода на терминал после выдачи «exec &> filename»
  • Захват вывода без перенаправления и оставьте его на терминале тоже
  • Почему выход не перенаправляется в файл?
  • Перенаправить вывод программы в файл не удается
  • io перенаправление на «крест» 2 программы
  • Ограничить размер файла журнала
  • 2 Solutions collect form web for “Когда следует использовать перенаправление ввода?”

    На странице man grep (на Debian):

    ОПИСАНИЕ

      grep searches the named input FILEs (or standard input if no files are named, or if a single hyphen-minus (-) is given as file name) for lines containing a match to the given PATTERN. By default, grep prints the matching lines. 

    В первом случае grep открывает файл, во втором оболочка открывает файл и назначает ему стандартный ввод grep , а grep не передается ни одному аргументу имени файла, предполагается, что ему нужно выполнить grep его стандартный ввод.

    Плюсы 1:

    • grep может grep более одного файла.
    • grep может отображать имя файла, где найдено каждое вхождение line

    Плюсы 2:

    • Если файл не открывается, оболочка возвращает ошибку, которая будет содержать более релевантную информацию (например, номер строки в сценарии) и более последовательным образом (если вы позволяете оболочке открывать файлы и для других команд), чем когда grep открывает его. И если файл не может быть открыт, grep даже не называется (что для некоторых команд, может быть, не grep может иметь большое значение).
    • в grep x < in > out , если in не может быть открытым, out не будет создан или усечен.
    • Нет проблем с некоторыми файлами с необычными именами (например, - или именами файлов, начинающимися с - ).
    • cosmetic: вы можете поместить <file любом месте командной строки, чтобы показать поток команд более естественно, как <in grep x >out если вы предпочитаете.

    Ответ StephaneChazelas охватывает grep(1) , и большинство команд Unix lineage работают таким образом, но не все. Стандартно читать либо со стандартного ввода (с клавиатуры, из файла, перенаправленного через < file , либо из вывода, переданного другой командой, глупый пример ls * | grep '^ab*c$' ), либо из файла (ы), заданные в качестве аргументов, например grep comment file1 file2 file3 . Некоторые команды используют соглашение там, что файл с именем - это стандартный ввод, поэтому вы можете сказать make-middle | cat head - tail make-middle | cat head - tail чтобы получить поток с head , независимо от того, что генерирует gen-middle среда, а затем tail . Это по дизайну, чтобы обеспечить гибкость в использовании команд.

    Что лучше? Пока он работает, cmd file короче cmd < file ; может быть крошечная разница во времени между оболочкой, выполняющей файл frobbing ( < ), и командой, выполняющей ее самостоятельно, но, вероятно, незаметной, если вы не делаете ничего больше в течение всего дня. Это будет зависеть от таких соображений, как профессионалы, упомянутые в ответе Стефана.

    Linux и Unix - лучшая ОС в мире.