Если вы напишите любую программу командной строки, которая принимает данные от пользователя, вы очень четко увидите, что происходит. Если у программы есть 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". Вы сможете подключиться к этой программе. Не требуется никакого дополнительного программирования, чтобы заставить работать трубопровод и перенаправление ввода. Если программа принимает ввод с клавиатуры от пользователя, тогда будет работать конвейер и перенаправление на него, а затем программа не будет запрашивать ввод.