Я новичок в Linux-системах, и я не могу понять, почему нам нужны два оператора, которые могут перенаправлять вывод: pipe as | и оператор перенаправления ouput >? Разве мы не можем всегда использовать второе? В большинстве случаев я вижу, что труба используется, если несколько команд соединены вместе. Если, однако, выход перенаправляется в файл, как в echo 'hello' > filename, используется оператор перенаправления вывода. Что мне здесь не хватает?
Я считаю, > используются для чтения / записи файлов, тогда как | Символ используется для пересылки вывода одной команды в другую.
cal | less
позволяет вам просматривать вывод cal в команде, называемой less.
cal > less
помещает вывод cal в файл, который называется less.
Есть много разговоров о перенаправлении вывода, но я думал, что этот вопрос касается ввода. Я проигнорирую > и >>, потому что они не имеют никакого отношения к вводу. Вместо этого я собираюсь сосредоточиться на <, <(...) и |:
< ожидает чтения из файла в STDIN, в то время как <(...) предоставляет дескриптор файла для STDOUT команды (... здесь) | pipe STDOUT из одного процесса в STDIN следующегоТаким образом, < не является непосредственно эквивалентным pipe (это чтение из файла) и <(...) читается с нужного места, но он дает дескриптор файла в качестве вывода. Вам нужно объединить их, чтобы предложить эквивалент трубы.
a | b
< <(a) b
Просто прочитав это, я надеюсь, что это полностью объясняет, почему существует труба. Это гораздо более читаемо.