Hi,
ich gebe mir den Provider über " echo "AT+COPS?" > /dev/ttyUSB0 & cat /dev/ttyUSB0 | grep COPS " aus.
Wie kann ich die Ausgabe automatisch stoppen?
Hi,
ich gebe mir den Provider über " echo "AT+COPS?" > /dev/ttyUSB0 & cat /dev/ttyUSB0 | grep COPS " aus.
Wie kann ich die Ausgabe automatisch stoppen?
Ausgabe von cat oder screen? Schau mal ob du hier fündig wirst!
Strg-C
Strg-C ist ja händisch... also nicht so automatisch
Aber das Signal SIGINT oder SIGTERM mit dem kill-Kommando zu verschicken sollte klappen:
Allerdings aus einer anderen Shell. Wenn du das nach einem bestimmten Zeitpunkt machen willst, musst du wahrscheinlich deinen cat-Prozess in den Hintergrund schicken & dann mit sleep vor dem grep arbeiten.
Verstehe ich leider nicht.
der Code macht was?
Verstehe ich leider nicht. der Code macht was?
Das sind 5 verkettete Kommandos. Sende einfach alle einmal einzeln ab, von links nach rechts (nicht umgekehrt !!!)... zuerst den ersten, dann den ersten und zweiten zusammen, dann den ersten, zweiten und dritten zusammen, am Ende den ersten, zweiten, dritten und vierten zusammen und schau, wie sich die Ausgaben verändern. Und was die Befehle selber machen, schaust Du Dir mit den man-pages an, z.b.
usw.
echo "AT+COPS?" > /dev/ttyUSB0 & cat /dev/ttyUSB0 | grep COPS
Hast du da ein & vergessen? Mit nur einem & wird der erste Befehl in den Hintergrund geschickt, was so aber eigentlich kein Sinn macht da das echo recht zügig vollzogen sein sollte. Wenn du möchtest das der nachfolgende Befehl nur bei Erfolg des ersten ausgeführt wird bedarf es && also 2x &
cat bedarf es hierbei aber auch nicht, nur grep reicht:
Allerdings kann es passieren das dein Modem laggt, also eine Verzögerung hat, und den Befehl via echo später ausführt als du grep ausführst.
Daher vermute ich dass das auch der Grund ist wieso du es wieder stoppen können möchtest?
Das geht zwar über die von __deet__ erwähnte Möglichkeit allerdings nicht im selben Script, da der cat oder grep Befehl das Script blockiert - es wird also so lange gewartet bis der Befehl beendet wurde. Da es sich aber nicht um eine einfache Datei handelt, bei der irgendwann das Dateiende erreicht ist, sondern um ein Device - wird der cat oder grep Befehl bis in alle Ewigkeit laufen bzw er erfolgreich war.... Du müsstest dann also ein weiteres Script oder den Befehl manuell ausführen - was aber vermutlich nicht gewollt wäre?
Um das zu lösen gäbe es (wie immer) mehrere Lösungen.
Die erste wäre den cat oder grep Befehl in den Hintergrund zu schicken und dann in einer nachfolgenden Schleife zum Beispiel für 10 Sekunden zu warten - entweder der Befehl/Prozess beendet sich vorher selbst oder du beendest ihn dann nach 10 Sekunden.
Zum Beispiel:
echo "AT+COPS?" > /dev/ttyUSB0
grep COPS /dev/ttyUSB0 &
PID=$!
TIMEOUT=10
t=0
while ps aux | awk '{print $2}' | grep -wx $PID >/dev/null ; do
t=$((++t))
[ "$t" -gt "$TIMEOUT" ] && break
sleep 1
done
kill -9 $PID &>/dev/null
echo Ende
Alles anzeigen
Die zweite Möglichkeit wäre das Programm "parallel" zu verwenden, mit dem man in bash mehrere Sachen gleichzeitig ausführen kann...
Und last but not least könntest du das auch in Python umsetzen, was meiner Meinung nach die beste Lösung wäre.
Kann ich die Ausgabe auch in ein TXT schreiben???
Klappt bei mir nicht
Welche Ausgabe?
Was hast du bisher versucht?
Ich habe mir ein Script erstellt mit dem Inhalt von dir
Code: Alles markieren
echo "AT+COPS?" > /dev/ttyUSB0
grep COPS /dev/ttyUSB0 &
PID=$!
TIMEOUT=10
t=0
while ps aux | awk '{print $2}' | grep -wx $PID >/dev/null ; do
t=$((++t))
[ "$t" -gt "$TIMEOUT" ] && break
sleep 1
done
kill -9 $PID &>/dev/null
echo Ende
und das über die Konsole gestartet.
Die Ausgabe ist die Zeile mit dem Provider.
Anschließend habe ich Probiert mir diese Ausgabe in eine TXT zu speichern.
./Provider >> /home/pi/Provider.txt
die Datei bleibt aber leer.
Das liegt daran dass der grep Befehl in den Hintergrund geschickt wird und eigentlich eine unabhängige Ausgabe erzeugt. Also wenn dann musst du dort eine Umleitung in eine Datei einfügen:
Klappt nicht, Datei bleibt ohne Inhalt
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!