Bash: Считайте строки из netcat соединения

У меня есть простой сценарий, который читает некоторые строки из соединения, инициализированного с помощью 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"

Я думаю, что должен переписать цикл, но я понятия не имею как.

Кто-то может помочь?

Спасибо.

3
задан 19 January 2017 в 17:01

2 ответа

Как объяснено здесь , удар сделал выбор для выхода только когда все команды в канале, как закончено. Здесь, 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"
1
ответ дан 1 December 2019 в 16:20

Удобный способ получить входящие данные и данные передачи по netcat.

#!/bin/bash

netcat -l localhost 12345  # port 12345
exec 6<>/dev/tcp/localhost/12345

while read <&6
do
        echo "$REPLY"
done
2
ответ дан 1 December 2019 в 16:20

Другие вопросы по тегам:

Похожие вопросы: