Advanced Script-Fun: Wie kann man den logger fallweise umgehen?
Moin Lisde,
immer wenn ich meine, dieses Betriebssystem halbwegs kapiert zu haben,
passiert etwas, dass mir meinen DAU-Status wieder auf die Stirne meißelt
:)
Mein Ziel: Ich möchte eine (geheime) MSN anrufen, die meinen Server zur
Internet-Einwahl veranlasst und er seine dynamische IP auf meinen
externen Webserver schreibt. Zunächst möchte ich nur Schritt 2 lösen,
also Hochstellen der aktuellen IP-Adresse.
Das Listenarchiv spuckt bei der Suche nach "ip upload" zwei fertige
Perl-Scripte von Jan Kirchhoff und David Haller aus:
http://lists.suse.com/archives/suse-linux/2001-Apr/4535.html und
http://lists.suse.com/archives/suse-linux/2001-Apr/4713.html.
Letzteres erscheint mir eleganter, beide aber funktionieren bei mir nur
unzureichend. Rufe ich sie standalone von der Shell aus auf, klappt
alles. Rufe ich sie aus /etc/ppp/ip-up.local aus, klappt es nicht: je
nach Script ist die IP-Adresse laut erfolgreich hochgeladener HTML-Datei
0.0.0.0 oder schlicht nichts.
Nach peinlich langer Fehlersuche glaube ich das Problem eingekreist zu
haben. M.E. liegt es am Umleiten der stdout von ifconfig in eine
temporäre Datei. Beim Aufruf von ip-up.local in ip.up wird nämlich
stdout in den logger gepipt und daher kommt die Ausgabe nicht in der
temporären Datei an. (btw auch nicht in /var/log/messages, aber das muss
ich nicht kapieren).
Meine ip-up.local hänge ich mal mit Ergebnissen in Kommentaren am Ende
an.
Jetzt meine Frage: Wie kann ich die Ausgaben eines Programmes umleiten,
wenn an "höherer" Stelle (in einem aufrufendem Script) die Ausgabe
bereits in den Logger geleitet wird?
Es erscheint mir nicht sinnvoll, die Logger-Umleitung in ip-up zu
entfernen. Oder bleibt mir gar nichts anderes übrig?
Dank und Gruß,
Alfred
---mein selbstgebasteltes (!) Attachment---
Meine Tests, relevante Stellen kommentiert:
---ip-up.local---
#!/bin/bash
echo `date` > /tmp/online.flag
chmod 666 /tmp/online.flag
/usr/bin/fetchmail -v >>/var/log/fetchmail 2>&1 &
/usr/sbin/netdate ntp1.ptb.de
/sbin/hwclock --systohc
echo 'jetzt ifconfig lesen'
# Diese Ausgabe landet wie erwartet in /var/log/messages
echo `/sbin/ifconfig ippp0 |/bin/grep "inet Adresse"`
# Ausgabe verschwindet im Orkus, sprich ist 0 Byte groß.
# Ahso, das da oben ist ein Backtick, nur so zum Test.
/sbin/ifconfig ippp0 |/bin/grep "inet Adresse" > /tmp/ip.tmp
# /tmp/ip.tmp ist 0 Byte groß.
/etc/ppp/ipupload
# Das hier ist derzeit das perl-script von David N. Haller.
# Die Umleitung von stdout erzeugt auch darin nur eine
# 0 Byte große temp-Datei.
--- ip-ip.local ende ---
--
Alfred Poschmann
* On Sat, 23 Nov 2002 at 16:50 +0100, Alfred Poschmann wrote: [Upload der eigenen IP bei Einwahl] [...]
/sbin/ifconfig ippp0 |/bin/grep "inet Adresse" > /tmp/ip.tmp # /tmp/ip.tmp ist 0 Byte groß.
Steht da oben echt "inet Adresse"? Mir liefert ifconfig auch bei explizitem Aufruf mit LANG=de /sbin/ifconfig da nur "inet addr" - insofern also kein Wunder, daß nix raus kommt. Pipe das Zeug mal ohne grep direkt in den File. Ausgabeumleitungen von anderen Skripts hindern Dich eigentlich nicht daran, selbst Umleitungen zu machen. Und teste das Skript mal trocken (also direkt aus der Shell aufrufen, nicht über den Umweg eines Telefonanrufs). -- Adalbert GPG welcome, request public key: mailto:adalbert+key@lopez.at
Hallo, On Sat, 23 Nov 2002, Alfred Poschmann wrote:
Mein Ziel: Ich möchte eine (geheime) MSN anrufen, die meinen Server zur Internet-Einwahl veranlasst und er seine dynamische IP auf meinen externen Webserver schreibt. Zunächst möchte ich nur Schritt 2 lösen, also Hochstellen der aktuellen IP-Adresse.
Das Listenarchiv spuckt bei der Suche nach "ip upload" zwei fertige Perl-Scripte von Jan Kirchhoff und David Haller aus: http://lists.suse.com/archives/suse-linux/2001-Apr/4535.html und http://lists.suse.com/archives/suse-linux/2001-Apr/4713.html.
Letzteres erscheint mir eleganter, beide aber funktionieren bei mir nur unzureichend. Rufe ich sie standalone von der Shell aus auf, klappt alles. Rufe ich sie aus /etc/ppp/ip-up.local aus, klappt es nicht: je nach Script ist die IP-Adresse laut erfolgreich hochgeladener HTML-Datei 0.0.0.0 oder schlicht nichts.
[Anmerkung: ich hab das script nie (mangels Bedarf) selbst eingesetzt ;)]
Jetzt meine Frage: Wie kann ich die Ausgaben eines Programmes umleiten, wenn an "höherer" Stelle (in einem aufrufendem Script) die Ausgabe bereits in den Logger geleitet wird?
man -P 'less +"/ exec "' bash Beispiele gibt's in jedem ./configure-script ;) exec 5>/tmp/foo.out exec 6>/tmp/foo.err foo 1>&5 2>&6
echo `/sbin/ifconfig ippp0 |/bin/grep "inet Adresse"` # Ausgabe verschwindet im Orkus, sprich ist 0 Byte groß. # Ahso, das da oben ist ein Backtick, nur so zum Test.
/sbin/ifconfig ippp0 |/bin/grep "inet Adresse" > /tmp/ip.tmp # /tmp/ip.tmp ist 0 Byte groß.
/etc/ppp/ipupload # Das hier ist derzeit das perl-script von David N. Haller. # Die Umleitung von stdout erzeugt auch darin nur eine # 0 Byte große temp-Datei. --- ip-ip.local ende ---
Hm. Wenn ich mir mein script anschau, muesste alles ausser den "status/debug-Meldungen" ("creating $html_file" usw.) eigentlich in der korrekten Datei landen... Hast du schon damit getestet, dass die zu aktualisierende html-Seite irgendeien lokale Datei ist? ($remote_file = ...). Auf stdout gibt das script auch nur diverse Status-Infos aus, die sollten also wohl theoretisch im syslog landen, wenn stdout beim logger landet... Spontan faellt mir nur ein, dass das 'ifconfig' nicht klappt... das script sollte, wenn das einlesen der aktuelle IP klappt eigentlich funktionieren... Hm. Kannst du dich mit ausfuehrlichen Details mal per PM melden? -dnh -- The correct plural of virus is "vi". Throw enough of the little buggers together and they neutralize each other and you get a usable text editor. -- Anthony de Boer
Am Sam, 2002-11-23 um 17.00 schrieb Adalbert Michelic:
* On Sat, 23 Nov 2002 at 16:50 +0100, Alfred Poschmann wrote: [Upload der eigenen IP bei Einwahl]
[...]
/sbin/ifconfig ippp0 |/bin/grep "inet Adresse" > /tmp/ip.tmp # /tmp/ip.tmp ist 0 Byte groß.
Steht da oben echt "inet Adresse"? Mir liefert ifconfig auch bei explizitem Aufruf mit LANG=de /sbin/ifconfig da nur "inet addr" - insofern also kein Wunder, daß nix raus kommt.
fredl@wauhsl2:~> /sbin/ifconfig eth0 Protokoll:Ethernet Hardware Adresse 00:00:CB:28:04:E4 inet Adresse:192.168.111.250 Bcast:192.168.111.255 Maske:255.255.255.0 inet6 Adresse: fe80::200:cbff:fe28:4e4/10 Gültigkeitsbereich:Verbindung [..]
Pipe das Zeug mal ohne grep direkt in den File. Ausgabeumleitungen von anderen Skripts hindern Dich eigentlich nicht daran, selbst Umleitungen zu machen.
Wie schon geschrieben, rufe ich es außerhalb von ip-up.local auf, also etwa von der Shell aus, dann klappt alles. Alfred
* On Sat, 23 Nov 2002 at 18:50 +0100, Alfred Poschmann wrote:
Am Sam, 2002-11-23 um 17.00 schrieb Adalbert Michelic:
* On Sat, 23 Nov 2002 at 16:50 +0100, Alfred Poschmann wrote: [Upload der eigenen IP bei Einwahl]
[...]
/sbin/ifconfig ippp0 |/bin/grep "inet Adresse" > /tmp/ip.tmp # /tmp/ip.tmp ist 0 Byte groß.
Steht da oben echt "inet Adresse"? Mir liefert ifconfig auch bei explizitem Aufruf mit LANG=de /sbin/ifconfig da nur "inet addr" - insofern also kein Wunder, daß nix raus kommt.
fredl@wauhsl2:~> /sbin/ifconfig eth0 Protokoll:Ethernet Hardware Adresse 00:00:CB:28:04:E4 inet Adresse:192.168.111.250 Bcast:192.168.111.255 Maske:255.255.255.0 inet6 Adresse: fe80::200:cbff:fe28:4e4/10 Gültigkeitsbereich:Verbindung
Und bei Ausführung als root? root kriegts IIRC normal in Englisch.
[..]
Pipe das Zeug mal ohne grep direkt in den File. Ausgabeumleitungen von anderen Skripts hindern Dich eigentlich nicht daran, selbst Umleitungen zu machen.
Wie schon geschrieben, rufe ich es außerhalb von ip-up.local auf, also etwa von der Shell aus, dann klappt alles.
Als User oder root? Was kommt raus, wenn Du das grep-Zeug weglässt? -- Adalbert GPG welcome, request public key: mailto:adalbert+key@lopez.at
* David Haller schrieb am 23.Nov.2002:
exec 5>/tmp/foo.out exec 6>/tmp/foo.err foo 1>&5 2>&6
Wieso &5 und &6 und nicht &3 und &4? Sind doch auch noch nicht belegt. Und warum nicht einfach: foo >/tmp/foo.out 2>/tmp/foo.err Bernd -- Alle meine Signaturen sind rein zufällig und haben nichts mit dem Text oder dem Schreiber zu tun, dem ich antworte. Falls irgendwelche Unrichtigkeiten dabei sein sollten, so bedauere ich das. Es wäre nett, wenn Du mich benachrichtigen würdest. |Zufallssignatur 0
* Samstag, 23. November 2002 um 16:50 (+0100) schrieb Alfred Poschmann:
immer wenn ich meine, dieses Betriebssystem halbwegs kapiert zu haben, passiert etwas, dass mir meinen DAU-Status wieder auf die Stirne meißelt :)
Willkommen im Club!
Mein Ziel: Ich möchte eine (geheime) MSN anrufen, die meinen Server zur Internet-Einwahl veranlasst und er seine dynamische IP auf meinen externen Webserver schreibt. Zunächst möchte ich nur Schritt 2 lösen, also Hochstellen der aktuellen IP-Adresse. [ ... ]
Nach peinlich langer Fehlersuche glaube ich das Problem eingekreist zu haben. M.E. liegt es am Umleiten der stdout von ifconfig in eine temporäre Datei.
Es ist zwar dann kein "Advanced Script-Fun" mehr, sondern eher banal,
aber die aktuelle lokale IP wird vom (i)pppd als '$4' an ip-up
übergeben (und auch an ip-up.local weitergereicht).
Darüberhinaus findet sie sich (zumindest beim pppd) auch noch in der
Umgebungs-Variablen IPLOCAL (beim ipppd steht dazu nichts in der
man-page(?)).
Gruß
Andreas
--
Andreas Könecke "Andreas Koenecke
Am Sam, 2002-11-23 um 18.55 schrieb Adalbert Michelic:
* On Sat, 23 Nov 2002 at 18:50 +0100, Alfred Poschmann wrote:
Am Sam, 2002-11-23 um 17.00 schrieb Adalbert Michelic:
* On Sat, 23 Nov 2002 at 16:50 +0100, Alfred Poschmann wrote: [Upload der eigenen IP bei Einwahl]
[...] fredl@wauhsl2:~> /sbin/ifconfig eth0 Protokoll:Ethernet Hardware Adresse 00:00:CB:28:04:E4 inet Adresse:192.168.111.250 Bcast:192.168.111.255 Maske:255.255.255.0 inet6 Adresse: fe80::200:cbff:fe28:4e4/10 Gültigkeitsbereich:Verbindung
Und bei Ausführung als root? root kriegts IIRC normal in Englisch.
Weil da ein Klartext-password im Perl-Script steht, habe ich es chmod 700 gesetzt. Daher kann ich es nur als root starten.
[..]
Pipe das Zeug mal ohne grep direkt in den File. Ausgabeumleitungen von anderen Skripts hindern Dich eigentlich nicht daran, selbst Umleitungen zu machen.
Wie schon geschrieben, rufe ich es außerhalb von ip-up.local auf, also etwa von der Shell aus, dann klappt alles.
Als User oder root? Immer root.
Was kommt raus, wenn Du das grep-Zeug weglässt?
In Davids Original-Script läuft das ohne grep: --- open(IFC, "/sbin/ifconfig $iface|") or die "Can't run ifconfig: $!\n"; while(<IFC>) { if(/inet Adresse:([0-9.]*)/) { $newip = $1; } } close(IFC); ---- Funktioniert aber trotzdem nicht. Oops. Dafür ist aber ein Pipe-Zeichen drin. Also doch ein Test ohne grep und pipe direkt in eine Datei ... und es klappt. Und btw. es heißt hier "inet addr". Warum kann ich nicht mehr pipen? Immer noch ohne Checkung, Alfred
Am Sam, 2002-11-23 um 16.50 schrieb Alfred Poschmann:
Moin Lisde,
immer wenn ich meine, dieses Betriebssystem halbwegs kapiert zu haben, passiert etwas, dass mir meinen DAU-Status wieder auf die Stirne meißelt :)
Das wird wohl noch eine Zeitlang so bleiben :) Durch Adalberts Abneigung gegen dieses Grep-Zeugs bin ich drauf gekommen, dass die Pipe gen grep in diesem Szenario nicht mehr richtig funktioniert. Jetzt schreibe ich die komplette ifconfig-Ausgabe in eine Datei und durchsuche von Perl aus. Jetzt geht alles. Das heißt aber nicht, dass ich es verstehe. Warum geht die Pipe nicht mehr? Alfred
On Sam, 23 Nov 2002 at 21:23 (+0100), Alfred Poschmann wrote: [...]
In Davids Original-Script läuft das ohne grep: --- open(IFC, "/sbin/ifconfig $iface|") or die "Can't run ifconfig: $!\n"; while(<IFC>) { if(/inet Adresse:([0-9.]*)/) {
Dats Perl, die Zeile ist quasi ein Perl-grep (nur schicker ;-)
$newip = $1; } } close(IFC); ----
Funktioniert aber trotzdem nicht.
Oops.
Dafür ist aber ein Pipe-Zeichen drin. Also doch ein Test ohne grep und pipe direkt in eine Datei ... und es klappt. Und btw. es heißt hier "inet addr".
Genau _das_ meinte Adalbert!
Warum kann ich nicht mehr pipen?
IMHO liegt es exakt an dem, was Adalbert vermutet. Es ist nicht die Pipe oder sonstwer dran schuld, sondern der Umstand, dass da offenbar die englische Ausgabe von ifconfig zuschlägt. Erweitere einfach mal Davids Script wie folgt: <schnipp> open(IFC, "/sbin/ifconfig $iface|") or die "Can't run ifconfig: $!\n"; while(<IFC>) { if(/inet Adresse:([0-9.]*)/ || /inet addr:([0-9.]*)/) { $newip = $1; } } close(IFC); <schnapp> Dann sollte es eigentlich klappen (der Mustervergleich sucht jetzt sowohl die deutsche als auch die englische Ausgabe) Jan
* On Sat, 23 Nov 2002 at 22:22 +0100, Alfred Poschmann wrote:
Am Sam, 2002-11-23 um 16.50 schrieb Alfred Poschmann:
Moin Lisde,
immer wenn ich meine, dieses Betriebssystem halbwegs kapiert zu haben, passiert etwas, dass mir meinen DAU-Status wieder auf die Stirne meißelt :)
Das wird wohl noch eine Zeitlang so bleiben :)
Durch Adalberts Abneigung gegen dieses Grep-Zeugs bin ich drauf gekommen, dass die Pipe gen grep in diesem Szenario nicht mehr richtig funktioniert.
Öhhh ... Abneigung nicht direkt, aber ich wollte zu Debugging-zwecken mal sehen, in was grep suchen muß, weil ich nicht recht glauben wollte, daß das auf Deutsch kommt.
Jetzt schreibe ich die komplette ifconfig-Ausgabe in eine Datei und durchsuche von Perl aus. Jetzt geht alles.
Das heißt aber nicht, dass ich es verstehe. Warum geht die Pipe nicht mehr?
Mit der pipe (und einem angepassten grep-Befehl) gehts nicht? -- Adalbert, immer noch ungläubig :-) GPG welcome, request public key: mailto:adalbert+key@lopez.at
Am Sam, 2002-11-23 um 19.29 schrieb Andreas Koenecke:
Es ist zwar dann kein "Advanced Script-Fun" mehr, sondern eher banal, aber die aktuelle lokale IP wird vom (i)pppd als '$4' an ip-up übergeben (und auch an ip-up.local weitergereicht). Darüberhinaus findet sie sich (zumindest beim pppd) auch noch in der Umgebungs-Variablen IPLOCAL (beim ipppd steht dazu nichts in der man-page(?)).
Das ist demütigend ... :) Alfred
Am Sam, 2002-11-23 um 23.04 schrieb Adalbert Michelic:
* On Sat, 23 Nov 2002 at 22:22 +0100, Alfred Poschmann wrote:
Am Sam, 2002-11-23 um 16.50 schrieb Alfred Poschmann: [..]
Das heißt aber nicht, dass ich es verstehe. Warum geht die Pipe nicht mehr?
Mit der pipe (und einem angepassten grep-Befehl) gehts nicht?
Noe. Als Antwort auf eine andere Deiner Mails habe ich Davids Original-Script "zitiert" (5 oder 6 Mails zurück in meiner Ansicht hier). Und das pipt die Ausgabe nach Perl, nicht nach grep. Und auch das geht nicht. Grep ist unschuldig. Vi natürlich auch :) Nur warum streikt die Pipe, dass wuesste ich gerne. Bin trotzdem erstmal zufrieden. Wenn ich für alle Probleme Workarounds fände, wäre ich der Unsterblichkeit schon deutlich näher. Oder so. Alfred
* On Sat, 23 Nov 2002 at 23:43 +0100, Alfred Poschmann wrote:
Am Sam, 2002-11-23 um 23.04 schrieb Adalbert Michelic:
* On Sat, 23 Nov 2002 at 22:22 +0100, Alfred Poschmann wrote:
Am Sam, 2002-11-23 um 16.50 schrieb Alfred Poschmann: [..]
Das heißt aber nicht, dass ich es verstehe. Warum geht die Pipe nicht mehr?
Mit der pipe (und einem angepassten grep-Befehl) gehts nicht?
Noe. Als Antwort auf eine andere Deiner Mails habe ich Davids Original-Script "zitiert" (5 oder 6 Mails zurück in meiner Ansicht hier). Und das pipt die Ausgabe nach Perl, nicht nach grep. Und auch das geht nicht. Grep ist unschuldig. Vi natürlich auch :)
Ja aber da steht ja auch "inet Adresse" und nicht "inet addr". -- Adalbert GPG welcome, request public key: mailto:adalbert+key@lopez.at
Am Sam, 2002-11-23 um 23.48 schrieb Adalbert Michelic:
* On Sat, 23 Nov 2002 at 23:43 +0100, Alfred Poschmann wrote:
Am Sam, 2002-11-23 um 23.04 schrieb Adalbert Michelic:
* On Sat, 23 Nov 2002 at 22:22 +0100, Alfred Poschmann wrote:
Am Sam, 2002-11-23 um 16.50 schrieb Alfred Poschmann: [..]
Das heißt aber nicht, dass ich es verstehe. Warum geht die Pipe nicht mehr?
Mit der pipe (und einem angepassten grep-Befehl) gehts nicht?
Noe. Als Antwort auf eine andere Deiner Mails habe ich Davids Original-Script "zitiert" (5 oder 6 Mails zurück in meiner Ansicht hier). Und das pipt die Ausgabe nach Perl, nicht nach grep. Und auch das geht nicht. Grep ist unschuldig. Vi natürlich auch :)
Ja aber da steht ja auch "inet Adresse" und nicht "inet addr".
Verstehe jetzt Dein Problem. Nein, es ist egal wonach ich greppe, es kommt gar nichts an. Pipe schickt nix weiter. Vielleicht liegt der Fehler zwischen meinen Ohren, vielleicht ist es auch ein Bug in der bash. Alfred
* Alfred Poschmann schrieb am 23.Nov.2002:
Am Sam, 2002-11-23 um 19.29 schrieb Andreas Koenecke:
Es ist zwar dann kein "Advanced Script-Fun" mehr, sondern eher banal, aber die aktuelle lokale IP wird vom (i)pppd als '$4' an ip-up übergeben (und auch an ip-up.local weitergereicht). Darüberhinaus findet sie sich (zumindest beim pppd) auch noch in der Umgebungs-Variablen IPLOCAL (beim ipppd steht dazu nichts in der man-page(?)).
Das ist demütigend ...
Wieso? Weil Du nicht man pppd aufmerksam genug gelesen hast? Das ist doch auch so ein Monsterteil, daß nur die wenigsten von vorne bis hinten durchlesen. Und dann auch noch verstehen. Bernd -- Bitte die Etikette beachten: http://www.suse-etikette.de.vu/etikette.html Bitte Realnamen angeben, kein Vollquoting, kein Html, PGP oder Visitenkarten benutzen. Signatur mit "-- " abtrennen, bei Antworten "Re: " voranstellen, sonst nichts. |Zufallssignatur 4
Hy, Am 02/11/23@16:50 schrieb Alfred Poschmann:
Mein Ziel: Ich möchte eine (geheime) MSN anrufen, die meinen Server zur Internet-Einwahl veranlasst und er seine dynamische IP auf meinen externen Webserver schreibt. Zunächst möchte ich nur Schritt 2 lösen, also Hochstellen der aktuellen IP-Adresse.
Das Listenarchiv spuckt bei der Suche nach "ip upload" zwei fertige Perl-Scripte von Jan Kirchhoff und David Haller aus: http://lists.suse.com/archives/suse-linux/2001-Apr/4535.html und http://lists.suse.com/archives/suse-linux/2001-Apr/4713.html.
Ich kenne die scripte nicht, aber hier mache ich das so: ---/etc/isdn/callerid.conf--- [MSN] NUMBER = <geheimMSN> ALIAS = TUX ZONE = 1 START = { [FLAG] FLAGS = IRU PROGRAM = /usr/local/sbin/ipsend } ---/etc/isdn/callerid.conf--- ---/usr/local/sbin/ipsent.sh--- #!/bin/sh /usr/sbin/isdnctrl dial ippp0 >> /var/log/einwahl 2>&1 test -e /var/run/proftpd.pid || /usr/sbin/rcproftpd start sleep 3 DATE=`date +%c` IP=`/sbin/ifconfig ippp0 | awk -F: /inet/'{print $2}' | \ awk '{print $1}'` cat /var/ip/html/top.html > /var/ip/html/index.html echo '<a href="ftp://'$IP':21">''ftp://'$IP':21''</a>' >> \ /var/ip/html/index.html cat /var/ip/html/bottom.html >> /var/ip/html/index.html ftp -n <geheimWEBSPACE> <<+EOT user <geheimUSER> <geheimPASS> cd maik send /var/ip/html/index.html index.html quit +EOT ---schnapp--- HTH. -- bye maik
Am Son, 2002-11-24 um 00.28 schrieb Maik Holtkamp:
Hy,
Am 02/11/23@16:50 schrieb Alfred Poschmann: [Krusch zu upload der dynmischen IP triggern gelöscht] Ich kenne die scripte nicht, aber hier mache ich das so:
---/etc/isdn/callerid.conf--- [MSN] NUMBER = <geheimMSN> ALIAS = TUX ZONE = 1 START = { [FLAG] FLAGS = IRU PROGRAM = /usr/local/sbin/ipsend } ---/etc/isdn/callerid.conf---
---/usr/local/sbin/ipsent.sh--- #!/bin/sh /usr/sbin/isdnctrl dial ippp0 >> /var/log/einwahl 2>&1
He klasse, da ist auch gleich Lösung für Schritt 1! Danke, dass hat mir vermutlich einige Stunden erspart! Grüße, Alfred PS: Die Perl-Scripte finde ich wegen des FTP-Handlings angenehmer; vielleicht aber auch nur, weil ich mir awk (noch) nicht antun möchte :)
Am Sam, 2002-11-23 um 22.23 schrieb Jan Trippler:
On Sam, 23 Nov 2002 at 21:23 (+0100), Alfred Poschmann wrote: [...]
In Davids Original-Script läuft das ohne grep: --- open(IFC, "/sbin/ifconfig $iface|") or die "Can't run ifconfig: $!\n"; while(<IFC>) { if(/inet Adresse:([0-9.]*)/) {
Dats Perl, die Zeile ist quasi ein Perl-grep (nur schicker ;-)
Ja, vieel schicker. Das ist so schick, dass das Lust auf Perl macht. [..]
Dafür ist aber ein Pipe-Zeichen drin. Also doch ein Test ohne grep und pipe direkt in eine Datei ... und es klappt. Und btw. es heißt hier "inet addr".
Genau _das_ meinte Adalbert!
Warum kann ich nicht mehr pipen?
IMHO liegt es exakt an dem, was Adalbert vermutet. Es ist nicht die Pipe oder sonstwer dran schuld, sondern der Umstand, dass da offenbar die englische Ausgabe von ifconfig zuschlägt.
Erweitere einfach mal Davids Script wie folgt:
Jan hat Recht, Adalbert hat Recht, und ich bin ein Nasenbär :) Ehrlich, ich hätte schwören können, es auch mit addr probiert zu haben. Aber Dein Vorschlag hilft! Pipe ist rehabilitiert, und ich hatte bei diesem addr-Test wohl etwas anderes falsch gemacht. Danke an alle!
Hallo, On Sat, 23 Nov 2002, Jan Trippler wrote:
On Sam, 23 Nov 2002 at 21:23 (+0100), Alfred Poschmann wrote: IMHO liegt es exakt an dem, was Adalbert vermutet. Es ist nicht die Pipe oder sonstwer dran schuld, sondern der Umstand, dass da offenbar die englische Ausgabe von ifconfig zuschlägt.
Jep. Das war damals ein spezifisches Beispiel, wo die Ausgabe von ifconfig eben auf deutsch daherkam.
Erweitere einfach mal Davids Script wie folgt:
<schnipp> open(IFC, "/sbin/ifconfig $iface|") or die "Can't run ifconfig: $!\n"; while(<IFC>) { if(/inet Adresse:([0-9.]*)/ || /inet addr:([0-9.]*)/) { $newip = $1; } } close(IFC);
while(<IFC>) { if (/inet (?:Adresse|addr):([0-9.]+)/) { $newip = $1; last; } } -dnh -- Wenn der Mailserver platzt, werden halt nochmal 80 GB dazugesteckt. Ist billiger als die Arbeitszeit zum Aufräumen. -- Marc Haber in dasr
Hallo, On Sun, 24 Nov 2002, Maik Holtkamp wrote:
---/usr/local/sbin/ipsent.sh--- #!/bin/sh [..] IP=`/sbin/ifconfig ippp0 | awk -F: /inet/'{print $2}' | \ awk '{print $1}'`
*Tst* ==== cat ~/bin/dynip.sh | sed '/^#/d;/^$/d' ==== IF="${1:-ppp0}"; /sbin/ifconfig "$IF" | sed -n 's/.*addr:\([0-9\.]*\).*/\1/p' ==== (Relevant ist dabei der Teil hinter der Pipe, das eine sed statt den awks ;) Funktioniert allerding (mit dieser Regex) nur, wenn ifconfig auch 'inet addr:<IP>' ausspuckt, ansonsten muss man die RE anpassen... Siehe nebenan das gleiche in perl. Und nur nebenbei: Es geht natuerlich auch mit einem 'awk': [...] | awk -F: '/inet/{gsub(/ .*/,"",$2); print $2;}' oder [...] | awk -F: '/inet/{gsub(/[^0-9.]*/,"",$2); print $2;} -dnh -- It is impossible to make anything foolproof because fools are so ingenious. -- from the fortune file
participants (7)
-
Adalbert Michelic
-
Alfred Poschmann
-
Andreas Koenecke
-
B.Brodesser@t-online.de
-
David Haller
-
Jan.Trippler@t-online.de
-
Maik Holtkamp