#bash #shell #pipe #named-pipes #io-redirection
#bash #оболочка #канал #именованные каналы #перенаправление ввода-вывода
Вопрос:
Я пишу асинхронные задачи в сценарии оболочки и координирую их с каналом канала для отображения на экране того, что происходит (и многое другое).
Что-то вроде этого:
long_task1 | very_long_task2 | other_long_task3 amp;
reporter_task
long_task1
very_long_task2
и other_long_task3
записывает их статус и прогресс в именованном вызываемом channel.pipe
канале. reporter_task
потребляет channel.pipe
отображение на экране некоторой информации для пользователя.
Если я реализую reporter_task
так
cat 'channel.pipe' | while IFS= read -r msg; do
# code
done
все работает нормально, но если я реализую это таким образом
while IFS= read -r msg; do
# code
done < channel.pipe
он завершается Interrupted system call
ошибкой с сообщением об ошибке.
Почему использование последнего синтаксиса приводит к прерыванию канала?
Комментарии:
1. Я думаю, что ваша операционная система и
bash
версия будут актуальны. Для меня это похоже на ошибку.