Ausgabe von cat oder screen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Strg-C

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Strg-C ist ja händisch... also nicht so automatisch ;)

    Aber das Signal SIGINT oder SIGTERM mit dem kill-Kommando zu verschicken sollte klappen:

    Code
    ps aux | grep "cat /dev/tty" | grep -v grep | awk '{ print $2}' | xargs kill

    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?


    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.

    Code
    man ps
    man grep

    usw.

    Einmal editiert, zuletzt von WinterUnit16246 (6. Dezember 2016 um 11:45)


  • 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:

    Code
    echo "AT+COPS?" > /dev/ttyUSB0 && grep COPS /dev/ttyUSB0

    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? :huh:

    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? :huh:

    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:

    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.

  • 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:

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!