Когда использовать трубы, а когда перенаправлять?

Когда использовать трубы, а когда перенаправлять?

Хоть это и базовые вещи, но все равно интересно. Рассмотрим эти два примера.

Дело 1:

[root@dhcppc0 practice]# cat file1 > wc -l
cat: invalid option -- l
Try `cat --help' for more information.

Случай 2:

[root@dhcppc0 practice]# cat file1 | wc -l
7

Интересно, почему в первом случае не работает перенаправление? Когда использовать перенаправление, а когда каналы? Я давно пользуюсь Linux, но все равно эта базовая штука сбивает меня с толку.

Пожалуйста помоги.

решение1

Theоператор перенаправленияиспользуется для потоковой передачи команды stdoutв файл ( >) или для потоковой передачи содержимого файла для stdinкоманды ( <).

Theоператор трубы( |) передает выходные данные процессов ( stdout) следующим процессам stdin.

Единственный способ заставить ваш первый случай работать — использовать временный файл, поэтому вам нужно будет выполнить два шага:

cat file1 > tmpfile
wc -l < tmpfile

решение2

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

Связанный контент