почему используются трубы вместо перенаправления ввода

Я новичок в Linux-системах, и я не могу понять, почему нам нужны два оператора, которые могут перенаправлять вывод: pipe as | и оператор перенаправления ouput >? Разве мы не можем всегда использовать второе? В большинстве случаев я вижу, что труба используется, если несколько команд соединены вместе. Если, однако, выход перенаправляется в файл, как в echo 'hello' > filename, используется оператор перенаправления вывода. Что мне здесь не хватает?

1
задан 26 June 2014 в 15:33

2 ответа

Я считаю, > используются для чтения / записи файлов, тогда как | Символ используется для пересылки вывода одной команды в другую.

cal | less 

позволяет вам просматривать вывод cal в команде, называемой less.

cal > less

помещает вывод cal в файл, который называется less.

3
ответ дан 24 May 2018 в 06:17
  • 1
    aha, поэтому перенаправление вывода - > - используется только для записи в файлы? Я не могу цепью команд, используя перенаправление вывода? – AngularInDepth.com 26 June 2014 в 15:40
  • 2
    @Maximus, вы не можете этого сделать. – Avinash Raj 26 June 2014 в 15:40
  • 3
    @AvinashRaj, получил тебя, спасибо! – AngularInDepth.com 26 June 2014 в 15:41

Есть много разговоров о перенаправлении вывода, но я думал, что этот вопрос касается ввода. Я проигнорирую > и >>, потому что они не имеют никакого отношения к вводу. Вместо этого я собираюсь сосредоточиться на <, <(...) и |:

< ожидает чтения из файла в STDIN, в то время как <(...) предоставляет дескриптор файла для STDOUT команды (... здесь) | pipe STDOUT из одного процесса в STDIN следующего

Таким образом, < не является непосредственно эквивалентным pipe (это чтение из файла) и <(...) читается с нужного места, но он дает дескриптор файла в качестве вывода. Вам нужно объединить их, чтобы предложить эквивалент трубы.

a | b
< <(a) b

Просто прочитав это, я надеюсь, что это полностью объясняет, почему существует труба. Это гораздо более читаемо.

2
ответ дан 24 May 2018 в 06:17
  • 1
    Большое спасибо за ваш ответ! Не могли бы вы объяснить эту строку < <(a) b - я этого не понимал. понимать – AngularInDepth.com 26 June 2014 в 21:48
  • 2
    Конечно. <(a) принимает вывод a и делает его доступным в виде файла. Другой < читает этот файл и превращает его в STDIN для b. – Oli♦ 26 June 2014 в 22:04
  • 3
    Получил, спасибо! Почему вы не писали так: b < <(a), или иначе это будет по-другому? А что есть a и b в ваших примерах? [F4] файл и b команда? – AngularInDepth.com 27 June 2014 в 10:11
  • 4
    Это точно так же; Я просто оставил его таким образом, чтобы упростить сравнение с трубой. Они обе команды так же, как и в a | b – Oli♦ 27 June 2014 в 12:25
  • 5
    Ясно спасибо! Лучший, М – AngularInDepth.com 27 June 2014 в 12:41

Другие вопросы по тегам:

Похожие вопросы: