Bash: получать сообщения от фонового процесса

0

Я отправляю данные через cansend в vcan0в то же время я слушаю сообщения, которые были отправлены на vcan0 с использованием candump vcan0 команда

По какой-то причине я не получаю никаких сообщений при отправке данных на vcan0 через скрипт, но когда я отправляю данные через терминал, скрипт как-то получает данные.

cansend vcan0 004#0152FEE400000000 # trying to send data (doesnt work)
while true;
do
  msg_candump=$(candump vcan0) # read vcan0
  if [[ ${#msg_candump} > 1 ]]; then #received msg
    echo $msg_candump
  fi
done
david114
источник

Ответы:

1

Вы используете хэш-символ # в качестве данных для отправки, но этот символ зарезервировано для комментариев в оболочках

Попробуйте это так:

( # Let run listener in background before trying to send to CAN
  while true;
  do
    msg_candump="$(candump vcan0 -T 1000)" # read CAN for 1 second
    if [[ ${#msg_candump} > 1 ]]; then #received msg
      echo "$msg_candump"
    fi
    sleep 0.025 # Give system a little breath
  done
) &
PID=$!

cansend vcan0 '004#0152FEE400000000' # <- quotes are matter 
sleep 5
kill -9 $PID
Alex
источник
спасибо большое .. я добавил msg_candump="$(candump vcan0 -T 1000)" к этому, и это работает сейчас.
david114
@ david114 Нет проблем, я рад, что это помогло тебе. я добавил -T 1000 вариант ответа, так что это может быть полезно для некоторых других
Alex