ubuntuusers.de

Umleitung im bash Script

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

TNTMaster

Anmeldungsdatum:
30. Juli 2009

Beiträge: 877

Hi

Ich bin gerade dabei, mir ein Script zu basteln, das mich über eingehende Anrufe informiert. Dazu überwache ich den Network Caller ID Daemon (NCID) meines DSL-Routers auf Ereignisse, um darauf reagieren zu können und schreibe die ankommenden Daten in eine Datei. Dabei ist mir aufgefallen, daß

nc $ip $ncidport > /tmp/ncid.tmp &

zwar die History der letzten Anrufe empfängt und in die Datei speichert, dann aber sofort beendet. Im Terminal ausgeführt funktioniert das aber. Dagegen

nc $ip $ncidport | tee /tmp/ncid.tmp > /dev/null &

funktioniert auch im Script und nc beendet sich nicht und lauscht unendlich auf einkommende Ereignisse. Kann mir jemand das Verhalten erklären?

Gruß TNT

BillMaier Team-Icon

Supporter

Anmeldungsdatum:
4. Dezember 2008

Beiträge: 6494

TNTMaster schrieb:

Hi

Ich bin gerade dabei, mir ein Script zu basteln, das mich über eingehende Anrufe informiert. Dazu überwache ich den Network Caller ID Daemon (NCID) meines DSL-Routers auf Ereignisse, um darauf reagieren zu können und schreibe die ankommenden Daten in eine Datei. Dabei ist mir aufgefallen, daß

nc $ip $ncidport > /tmp/ncid.tmp &

zwar die History der letzten Anrufe empfängt und in die Datei speichert, dann aber sofort beendet.

Weil das Skript beendet wird und damit den Befehl mit beendet.

Ich behaupte mal, dass das hier Deine Lösung ist: nohup

Im Terminal ausgeführt funktioniert das aber.

Solange Du das Terminal nicht schließt. Richtig?

nc $ip $ncidport | tee /tmp/ncid.tmp > /dev/null &

funktioniert auch im Script und nc beendet sich nicht und lauscht unendlich auf einkommende Ereignisse. Kann mir jemand das Verhalten erklären?

Da hänge ich jetzt. Ist schon zu spät. Bin aber gespannt auf die Lösung.

TNTMaster

(Themenstarter)

Anmeldungsdatum:
30. Juli 2009

Beiträge: 877

Weil das Skript beendet wird und damit den Befehl mit beendet.

Nein, Script läuft weiter, bis ich es manuell beende. Trotzdem beendet sich nc sofort.

Ich behaupte mal, dass das hier Deine Lösung ist: nohup

nohup ist mir bekannt, hilft in diesem Fall nicht weiter.

Im Terminal ausgeführt funktioniert das aber.

Solange Du das Terminal nicht schließt. Richtig?

Ja, wenn ich das Terminal schließe, beendet nc, so wie es auch sein soll.

Das Problem läßt sich auch ohne Script nachstellen. Öffne 2 Terminals

Fall 1:

# Terminal 1:
~$ bash -c "nc 192.168.2.1 3333 > /tmp/ncid.tmp &"
~$

# Terminal 2:
~$ ps -C nc
  PID TTY          TIME CMD
~$

nc läuft nicht

Fall 2:

# Terminal 1:
~$ bash -c "nc 192.168.2.1 3333 | tee /tmp/ncid.tmp > /dev/null &"
~$

# Terminal 2:
~$ ps -C nc
  PID TTY          TIME CMD
10641 pts/2    00:00:00 nc
~$

nc läuft

das gleiche Spiel ohne "bash -c"

Fall 1:

# Terminal 1:
~$ nc 192.168.2.1 3333 > /tmp/ncid.tmp &
[1] 10659
~$

# Terminal 2:
~$ ps -C nc
  PID TTY          TIME CMD
10659 pts/2    00:00:00 nc
~$

Fall 2:

# Terminal 1:
~$ nc 192.168.2.1 3333 | tee /tmp/ncid.tmp > /dev/null &
[1] 10823
~$

# Terminal 2:
~$ ps -C nc
  PID TTY          TIME CMD
10822 pts/2    00:00:00 nc
~$

Hier läuft nc in beiden Fällen

Zum testen, ob nc richtig funktioniert, kann man eine Nachricht abschicken, oder sich selbst anrufen

~$ echo "MSG: Eine Nachricht" | nc 192.168.2.1 3333
200 NCID Server:  ARC_ncidd 0.01
< ... >
CIDLOG: *DATE*02032013*TIME*0558*LINE*49xxx*NMBR*+49xxx*MESG*NONE*NAME*NO NAME*
MSG: Eine Nachricht
~$

Die Nachricht findet sich dann auch in /tmp/ncid.tmp

TNTMaster

(Themenstarter)

Anmeldungsdatum:
30. Juli 2009

Beiträge: 877

Hab noch ein paar Versuche unternommen und festgestellt, daß nc mit der Option

-d      Do not attempt to read from stdin.

auch mit direkter Umleitung (ohne Umweg mit tee) funktioniert. Da scheint wohl von stdin noch etwas anzukommen, was nc zum Beenden bewegt.

Antworten |