Я работал над проектом для колледжа, в нем у меня есть несколько небольших скриптов, которые выполняют операции над простой базой данных (например, выборочной информации), серверный скрипт, который принимает запросы от различных экземпляров клиентского скрипта через каналnamed server.pipe и возвращает их результат (обычно несколько строк текстового файла) через именованный канал отдельного клиента.
Для многострочных ответов я попытался использовать цикл while в клиенте, чтобы продолжить чтение изтруба, я использовал что-то вроде этого:
read response < $id.pipe
while [ $response != "end_result" ]; do
echo $response
read response < $id.pipe
Это иногда возвращало бы полный результат, в других случаях возвращало бы его часть, а иногда нет.Когда он не вернул полный результат, я думаю, что выполняющийся скрипт был заблокирован каналом, поскольку операторы отладки показали, что он не выполнил свои последние строки.
Вместо этого я исправил это
tail <$return_pipe &
Я знаю, что tail будет читать из канала, даже если он закрыт, но мне нужна помощь в объяснении условий, вызывающих сбой первого, поскольку я сейчас пишу отчет о назначении.Я много читал и вроде как понял, но мне нужна помощь со спецификой.
Если кому-то интересно, серверный скрипт вызывает скрипт так:
return_pipe=${ar[4]}.pipe
./select.sh ${ar[1]} ${ar[2]} ${ar[3]} >$return_pipe &
И часть сценария select, возвращающая результат, выглядит следующим образом:
echo "start_result"
cut -d' ' -f$3 ./$1/$2
echo "end_result"
Если кто-нибудь может помочь мне понять это и объяснить это, то это будет очень признательно.Это мой первый пост, поэтому я надеюсь, что отформатировал его тоже!Спасибо