Bash: Nachrichten vom Hintergrundprozess empfangen

302
david114

Ich sende Daten via cansendan vcan0, gleichzeitig höre ich Nachrichten an, die vcan0mit dem candump vcan0Befehl gesendet wurden

Aus irgendeinem Grund erhalte ich keine Nachrichten, wenn vcan0ich Daten über das Skript sende, aber wenn ich Daten über das Terminal sende, empfängt das Skript irgendwie Daten.

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 
0

1 Antwort auf die Frage

1
Alex

Sie verwenden Hash-Zeichen #als Daten zum Senden, aber dieses Zeichen ist für den Kommentar in Shells reserviert

Versuchen Sie es so:

( # 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 
vielen dank .. ich fügte `msg_candump =" $ (candump vcan0 -T 1000) "hinzu und es funktioniert jetzt. david114 vor 5 Jahren 0
@ david114 Kein Problem, ich bin froh, dass es dir geholfen hat. Ich habe der Antwort die Option "-T 1000" hinzugefügt, daher könnte es für einige andere hilfreich sein Alex vor 5 Jahren 0