Собирание данных от Счастливой случайности 1620a через Bash/dev/tcp дескриптор файла

Спасибо за ответы, я создал для него команду sed:
  • протестирована: Scientific Linux 6.4; Ubuntu 12.04

    .

  • 2
    13.04.2017, 15:36
    1 ответ

    Мне не ясно, если вы получите один результат на чтение? , или если вы получите поток результатов. Я думаю, вы говорите один запрос -> один ответ. И вы никогда не давали 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 убьет подпункл или нет.

    Переменные, установленные внутри цикла, не присутствуют после того, как оно заканчивается, , потому что мы в нем трудились , если вы собираетесь попробовать это.

    Это старый вопрос, поэтому я на самом деле не запустил их. Там могут быть синтаксические ошибки или ошибки. Но общая идея - это звук, я почти уверен.

    0
    27.01.2020, 22:57

    Теги

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