У меня есть простой сценарий, который читает некоторые строки из соединения, инициализированного с помощью netcat. Клиент может передать некоторые "команды". Если клиентская запись "выходит", мне нравится закрывать соединение.
НО: После передачи "выход" сценарий echos "Полученный 'выход'", но все еще читает еще одну строку, прежде чем "До свидания" появится.
echo "Start listening on port $PORT ..."
(echo "Welcome. Please give me one of the following commands:
$AVAILABLECOMMANDS") | nc -q -1 -l $PORT | while read line
do
if [ "$line" == 'exit' ]; then
echo "Received 'exit'"
break
else
result=$(executeCommand $line)
echo "$result"
fi
done
echo "Good bye"
Я думаю, что должен переписать цикл, но я понятия не имею как.
Кто-то может помочь?
Спасибо.
Как объяснено здесь , удар сделал выбор для выхода только когда все команды в канале, как закончено. Здесь, netcat
не хочет останавливаться, но после того, как так как конца канал будет поврежден, netcat
сбои. Вот почему необходимо ожидать еще раз для выхода из цикла (между прочим, у Вас есть ошибка при выходе из цикла). Вот версия, которая не имеет этой проблемы канала:
#!/bin/bash
echo "Start listening on port 12345 ..."
while read line
do
if [ "$line" == 'exit' ]; then
echo "Received 'exit'"
break
else
echo "$line"
fi
done < <((echo "Welcome. Please give me one of the following commands: $AVAILABLECOMMANDS") | nc -q -1 -l 12345)
echo "Good bye"
Удобный способ получить входящие данные и данные передачи по netcat.
#!/bin/bash
netcat -l localhost 12345 # port 12345
exec 6<>/dev/tcp/localhost/12345
while read <&6
do
echo "$REPLY"
done