У меня странная ситуация, когда Bash, похоже, неправильно назначает одну из моих переменных, или это может быть связано с конвейерами.Я честно не уверен.Вот код:
test=0
if [ "$#" -ne 4 ]; then
echo "Error: You have passed an incorrect number of parameters" > client.pipe
test=1
if [ $test -eq 1 ]; then <-------THIS SOMETIMES DOESN'T EXECUTE
echo "end_result" > client.pipe
exit 1
Здесь происходит следующее: это серверный скрипт для команды: 'select'.
Команда select принимает 4 параметра: идентификатор (для указания канала, на который выводятся сообщения), имя базы данных, имя таблицы, а затем строка идентификаторов столбцов.
На другом конце клиентского канала клиентский сценарий прослушивает сообщения, и если он получает 'end_result', он прекращает прослушивание.Как вы можете видеть, что бы ни случилось, 'end_result' должен быть отправлен обратно в канал и напечатан клиентским скриптом, но иногда этого не происходит, и я зацикливаюсь на бесконечном цикле while.Вот клиентский скрипт, чтобы вы могли увидеть, где происходит «прослушивание».
while true; do
read message < client.pipe
if [ "$message" == "end_result" ]; then
echo $message
break
else
echo $message
fi
done
Если я передаю неверный номер параметров первому сценарию, он выводит сообщение «Ошибка: вы передали неверный номер параметров» в канал, но иногда он не назначается1 для проверки, и затем он не отправляет end_result в канал и завершает работу.Я не могу понять, в чем проблема, и, как я уже сказал, она работает, вероятно, 7 раз из 10 ... Я могу обойти эту проблему, отправив родительский скрипт «end_result» клиенту, но этонемного взломать.
Я был бы очень признателен, если бы кто-нибудь мог понять, в чем проблема, и я с радостью предоставлю больше информации о коде, если потребуется.
Большое спасибо, R
EDIT:
Я почти уверен, что проблема заключается в чтении из клиентского канала и цикла while, как будто что-то получалосьзастрял в трубе ...