Сопроцессоры Со-процессор(coproc) - это процесс, который выполняется параллельно с оболочкой и с которым может взаимодействовать оболочка. Оболочка запускает процесс в фоновом режиме и управлется он с помощью двух каналов: один для отправки данных в со-процесс, второй для получения из со-процесса. Для выполнения сопроцесса существуют два синтаксиса: ```shell coproc name non-simple command # Start a named coprocess coproc command args #Start an unnamed coprocess ``` Оболочка создает переменную массив `name`, чтобы хранить файловые дескрипторы для связи с со-процессом. `name[0]` - это файловый дескриптор канала подключенного к стандартному выводу со-процесса (вход для управляющей оболочки), а name [1] - подключен к стандартному вводу со-процесса (вывод из оболочки). Кроме того, переменная `name_PID` содержит идентификатор процесса сопроцесса. Если имя не указано, оболочка использует `COPROC`. Например: ```shell coproc testproc (echo 1; read line; echo $line) #Запускаем со-процесс с именем testproc в фоновом режиме echo ${testproc[@]} # Выводим файловые дескрипторы #62 58 echo $testproc_PID # PID со-процесса #18013 read out <&${testproc[0]} # Прочитайть первую строку сопроцесса и показать её echo $out #1 echo "Hello world" >&${testproc[1]} # Отправить со-процессу какой-нибудь ввод read out2 <&${testproc[0]} # Чтение второй строки вывода #[2]+ Готово coproc testproc ( echo 1; read line; echo $line ) echo $out2 # Показать вторую строку вывода #Hello world ```