Problem mit Bash und Umleitung von stdout

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
tecneeq
Beiträge: 34
Registriert: 31.10.2010 10:56:18
Lizenz eigener Beiträge: neue BSD Lizenz
Kontaktdaten:

Problem mit Bash und Umleitung von stdout

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

Re: Problem mit Bash und Umleitung von stdout

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.

Code: Alles auswählen

traceroute -n google.de
gibt bei mir 12 hops resp. 10 nicht-lokale Server.
Wenn ich wissen will, ob ich online bin, würde ein

Code: Alles auswählen

traceroute -n -m 3 google.de
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

Re: Problem mit Bash und Umleitung von stdout

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:

Re: Problem mit Bash und Umleitung von stdout

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! :THX:

Antworten