CLI - Command-line Interface
Shell
бесконечно (пока не будет вызвана операция Exit
) считывает по строке из входного потока и обрабатывает каждую, вызывая для них методы класса Parser
.
Parser
обрабатывает сырые строки с помощью конечного автомата - распознаёт операции подстановки из окружения ($) и выполняет их на месте.
В итоге Parser
получает на выходе очередь из RawCommandData
(класс, содержащий информацию о введенной команде).
Затем Parser
передаёт управление Shell
'у.
Получив очередь RawCommandData
, связанных операцией пайплайна, Shell
начинает их выполнение.
Если операции были связаны операцией пайплайна — то Shell
занимается тем, чтобы передать информацию из выходного потока только что выполненной команды — во входной поток следующей команды.
Каждая операция CLI, которую запускает Shell
, является реализацией интерфейса Command
. Для запуска каждой из них им нужно подать на вход входной поток. Возвращает каждая такая команда выходной поток, содержащий её данные.
После выполнения всех команд в очереди Shell
выводит информацию из выходного потока на экран (если она есть).
Если в ходе выполения операций будет выполнена операция Exit
, то Shell
проверит это и закончит выполнение сразу же, после завершения операции Exit
и возврата управления в Shell
.