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

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

[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 ~]# 

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

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-инструменты записывают в STDERR вместо STDOUT по умолчанию?
  • io перенаправление на «крест» 2 программы
  • no stderr output при использовании stdbuf -o 0 | & tee log
  • Почему я могу добавить файл, но не перезаписать его?
  • Почему перенаправление STDERR на / dev / null выполняется таким образом?
  • Перенаправление после запуска процесса
  • Перенаправить вывод программы в файл не удается
  • Восстановление вывода на терминал после выдачи «exec &> filename»
  • Interesting Posts

    Linux Mint 18: моя Dell Precision 5520 перезагружается от приостановки, а не просыпается

    синтаксическая ошибка рядом с токеном ';' (домашнее задание)

    навык на вашей собственной сессии

    Как настроить последовательное соединение через USB с помощью g_serial

    Установите по умолчанию режим vi-mode Bash в «обычный» режим Vi (не «вставить») и поместите курсор в начало строки, подражая KornShell

    Есть ли способ использовать ssh удаленно без настройки брандмауэра?

    Замените содержимое группы захвата регулярного выражения, используя sed

    Ошибка загрузки загрузчика Fedora

    Автозаполнение Zsh gpg2

    Что происходит, когда файлы добавляются / удаляются в середине цикла «for f in *» sh?

    Копирование определенных подпапок со структурой каталогов в новую папку

    Что означает «установка fs с ошибками» в dmesg и что делать после этого?

    Использование и понимание системных параметров, связанных с планированием, в контексте рабочего стола

    Всякий раз, когда ansible вносит изменения в sshd в CentOS7, случайная игра в будущее не может подключаться

    Как сделать принтер, добавленный через CUPS, отображаться в списке принтеров по умолчанию в Centos

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