Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
-
tecneeq
- Beiträge: 34
- Registriert: 31.10.2010 10:56:18
- Lizenz eigener Beiträge: neue BSD Lizenz
-
Kontaktdaten:
Beitrag
von tecneeq » 25.03.2014 17:20:08
Hi,
folgender Einzeiler:
Code: Alles auswählen
while : ; do sleep 1; ping -c 1 google.de 2>/dev/null && echo "$(date) Ping succeeded" || echo "$(date) Ping failed"; done | egrep "bytes from| Ping "
Funktioniert. Wenn ich die Ausgabe mit >/dev/null verwerfe, geht es auch:
Code: Alles auswählen
while : ; do sleep 1; ping -c 1 google.de 2>/dev/null && echo "$(date) Ping succeeded" || echo "$(date) Ping failed"; done | egrep "bytes from| Ping " > /dev/null
Schreibe ich die Ausgabe in eine Datei, geht es nicht:
Code: Alles auswählen
while : ; do sleep 1; ping -c 1 google.de 2>/dev/null && echo "$(date) Ping succeeded" || echo "$(date) Ping failed"; done | egrep "bytes from| Ping " > log.txt
Die Rechte von log.txt:
Code: Alles auswählen
kkruse@nb8810:~$ ls -l log.txt
-rw-r--r-- 1 kkruse kkruse 0 Mär 25 17:13 log.txt
kkruse@nb8810:~$ whoami
kkruse
Wie kriege ich stdout des Einzeilers in eine Textdatei?
-
rendegast
- Beiträge: 15041
- Registriert: 27.02.2006 16:50:33
- Lizenz eigener Beiträge: MIT Lizenz
Beitrag
von rendegast » 25.03.2014 18:07:46
Code: Alles auswählen
while : ; do sleep 1; { ping -c 1 google.de 2>/dev/null && echo "$(date) Ping succeeded" || echo "$(date) Ping failed" ;} | egrep "bytes from| Ping " ; done > log.txt
(ohne die geschweiften Klammern kommt die ganze ping-Ausgabe, das grep greift dann also nicht)
Anm.
gibt bei mir 12 hops resp. 10 nicht-lokale Server.
Wenn ich wissen will, ob ich online bin, würde ein
ausreichen, ohne andere Server zu "nerven".
Zuletzt geändert von
rendegast am 25.03.2014 18:19:04, insgesamt 1-mal geändert.
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")
-
Cae
- Beiträge: 6349
- Registriert: 17.07.2011 23:36:39
- Wohnort: 2130706433
Beitrag
von Cae » 25.03.2014 18:11:47
Das dachte ich zuerst auch, aber das egrep liegt ausserhalb der Schleife, die schon einen Block darstellt. Nach deinem Vorschlag kommt mir aber eine andere Idee: Ich vermute mal, dass egrep da nicht zeilenweise puffert und einfach noch nicht genug Daten durchgegangen sind. Demnach wuerde sich das Verhalten mit egrep --line-buffered veraendern.
Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.
—Bruce Schneier
-
tecneeq
- Beiträge: 34
- Registriert: 31.10.2010 10:56:18
- Lizenz eigener Beiträge: neue BSD Lizenz
-
Kontaktdaten:
Beitrag
von tecneeq » 26.03.2014 12:51:22
Für rendegast: Es geht um einen Host im Lan, habe nur google.de genommen damit man das direkt mal pasten kann.
Die Lösung von Cae passt. Da wäre ich selbst nie drauf gekommen, danke!