Если вы напишите любую программу командной строки, которая принимает данные от пользователя, вы очень четко увидите, что происходит. Если у программы есть read/readLine(разные языки могут дать ей другое имя), оператор, то есть программа запрашивает ввод у пользователя, тогда вы также можете направить или перенаправить этот ввод, используя | или <
Если вы посмотрите на программу, которая принимает ввод, вы увидите, как с more или less , если вы наберете ее без ввода $more<ENTER> , то она запросит ввод. Передавая данные к нему, он останавливает запрос на ввод данных. Если мы запустим sed без параметров $sed<ENTER> тогда он обязательно выдаст ошибку, и мы также не сможем сделать $echo abc|sed<ENTER> . Но если мы делаем $sed 's/a/b/'<ENTER> тогда он запрашивает ввод. И именно поэтому echo abc|sed 's/a/b/'<ENTER> работает.
Вы можете увидеть это, если напишите программу, даже такую простую, как Hello World, но она принимает ввод, как программа запрашивает слово, и если человек набирает "abc", он говорит "Hello abc". Вы сможете подключиться к этой программе. Не требуется никакого дополнительного программирования, чтобы заставить работать трубопровод и перенаправление ввода. Если программа принимает ввод с клавиатуры от пользователя, тогда будет работать конвейер и перенаправление на него, а затем программа не будет запрашивать ввод.