.
Мне не ясно, если вы получите один результат на чтение?
, или если вы получите поток результатов. Я думаю, вы говорите один запрос -> один ответ. И вы никогда не давали Hexdump или что-нибудь из вывода, но похоже, что концовки линии, вероятно, являются только CR-TOR, а не DOS CR-LF или UNIX LF. (Вот почему ваша подсказка перезаписывает вывод после NetCat.)
Я нашел руководство: http://us.flukecal.com/literature/product-manuals/1620A-user%e2%80%99s-guide
Это подтверждает, что ответы прекращаются с помощью CR. Это делает огромную боль для работы в оболочке, потому что Tr '\ R' '\ N'
имеет такую же проблему, что и CAT: он не остановится после одной линии.
# read -d sets the delimiter.
# $'' is a special type of quoting where \r expands to a literal carriage return.
get_temp () { # io to fluke on FD 3
echo "read?" >&3
local resp
IFS= read resp -d $'\r' -u 3
printf '%s\n' "$resp"
}
exec 3<>"/dev/tcp/$host/$port"
while true; do # whole loop is redirected to log
temp="$( get_temp )"
printf '%s - %s\n' "$(date +%F_%T)" "$temp"
# or echo -n "$(date) - "; get_temp
sleep 1
done | tee -a "$log"
# or just >> "$log", and tail -f the log file when you want it on screen.
Или реализация, которая дает TR
TR TR TR TR TR PR CR -> LF-перевод:
exec 3<>"/dev/tcp/$host/$port"
(while echo 'read?';do sleep 1;done >&3) &
tr -d '\r' '\n' <&3 | IFS= while read temp; do
printf '%s - %s\n' "$(date +%F_%T)" "$temp"
done >> "$log"
Это ставит подпись на фоновом режиме, написание команды каждую секунду. Вам все еще нужен цикл читания, чтобы получить текущее время, отформатированное в полученные строки. Idk, если ^ c убьет подпункл или нет.
Переменные, установленные внутри цикла, не присутствуют после того, как оно заканчивается, , потому что мы в нем трудились , если вы собираетесь попробовать это.
Это старый вопрос, поэтому я на самом деле не запустил их. Там могут быть синтаксические ошибки или ошибки. Но общая идея - это звук, я почти уверен.