2016-07-18 13 views
0

Also ich versuche, einen seriellen Befehl an ein Embedded-Gerät zu senden und eine Antwort für unsere Testautomatisierung zu erhalten, habe ich versucht, Katze als den folgenden Code und bleibt auf den Befehl Katze stecken, das gleiche gilt für dd, und ich habe es auch versucht die in this link veröffentlichte Lösung vergeblich. Ich möchte einen Befehl senden, eine Antwort erhalten und etwas mit der nicht blockierenden Antwort tun. Vielleicht hat Bash etwas Ähnliches wie Select() in C? Oder wenn jemand eine elegantere Lösung hat, würde ich es ungemein schätzen :)Katze bleibt beim seriellen Empfang hängen?

#!/bin/bash 
#tty=/dev/tps21 
stty -F /dev/tps21 speed 38400 cs8 cread clocal -cstopb -parenb >> /dev/null 
echo 1 
echo 'loglevel off' > /dev/tps21 
echo 2 
cat </dev/tps21>> /dev/null #Gets stuck here 
echo 3 
echo 'shell <username> <password> /opt/tools/eeprom/read.sh wifi_apn' > /dev/tps21 
echo 4 
echo 5 
apn_raw="$(cat < /dev/tps21)" #Gets Stuck here 
echo 6 
apn="$(echo "$apn_raw" | sed -n 3p)" 
echo 7 
echo "${apn}" 
echo 8 
echo 'shell <username> <password> /opt/tools/eeprom/read.sh wifi_pass' > /dev/tps21 
pass_raw="$(cat -v < /dev/tps21)" #Gets Stuck here 
pass="$(echo "$pass_raw" | sed -n 3p)" 
echo "${pass}" 
nmcli --nocheck d $apn connect $apn password $pass iface wlan0 
+0

'cat' liest aus seinem Eingabe, bis die Eingabe das Ende der Datei anzeigt. Wenn diese Anzeige nie erzeugt wird, wird sie dort für immer auf weitere Eingaben warten. Im Prinzip funktioniert es wie geplant. Wenn Sie eine begrenzte Menge von Daten lesen möchten, dann wäre 'dd' vielleicht besser als' cat' ... – twalberg

+0

Vielen Dank Ich komme zu dieser Erkenntnis, aber 'dd' ist nicht nützlich in meiner Anwendung seit Ich weiß nicht, wie viele Bytes ich lese, ich könnte danach einige Log-Nachrichten bekommen –

Antwort

0

Die einfachste Lösung fand ich war nur timeout XX cat zu verwenden und das klappt perfekt für meine Anwendung