Канал - это то, что считывает входные данные и выдает выходные данные одновременно, например, у вас может быть канал, который принимает входные данные, состоящие из строчных букв, канал будет изменяться (без изменения исходного источника). ввода, например файла данных) входных данных и измените их на заглавные буквы.
Трубы обрабатываются слева направо.
echo line | sort | ./calculate ${1}
line
по трубопроводу sort
. Sort
затем сортирует входные данные и выводит данные, которые, в свою очередь, передаются в процесс calculate
, который ожидает некоторый ввод.
Может быть, проще представить это таким образом, подумайте об этом как о трубе или пластиковой трубе (разновидность водосточного желоба):
INPUT <---+---> OUTPUT
|
pipe
Edit:
Поскольку ваш первоначальный вопрос задан для интерпретации фрагмента кода, основанного на C Shell, без лишних слов ...
1. set line = ($<)
2. while(${#line} != 0)
3. if(${#line} == 5) then
4. echo line | sort | ./calculate ${1}
5. endif
6. set line = ($<)
7. end
- Принимает ввод из стандартного ввода или из файла (это можно сделать, перенаправив файл в этот скрипт, выполнив 'this_script <файл данных' или 'cat data_file | this_script'. </li>
- В то время как цикл чтения до достижения EOF (в вариантах Unix / Linux, его Ctrl + D, для Windows, его клавиша F6)
- Если количество строк достигло 5, то есть первые 5 строк, это та часть, которая беспокоит меня, и я не уверен на 100% ... но продолжу объяснять дальше ...
- 5 строк выводятся на экран, но из-за конвейера выходные данные становятся входными данными для сортировки, в свою очередь сортировка затем считывает данные с этих входных данных, сортирует данные и выводится, но опять же, из-за другой канал, рассчитать принимает входные данные из отсортированного вывода.
- Устанавливает переменную
line
для дополнительного ввода. и повторяет петли вокруг.
И чтобы ответить на ваш комментарий, при желании вы можете прикрепить трубы, я выделю строку 4, как показано:
echo line | sort | uniq | ./calculate ${1}
Не стесняйтесь поиграть с комбинацией, кстати, я думаю, что line
должно быть $line
, если память мне не изменяет?