PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Variable in ip-up.d script wird nicht definiert.



Natty
08.12.04, 07:01
Hi Leute,

folgendes kleines Script habe ich mir geschrieben um beim Start der Internetverbindung meine externe IP in eine Datei zu schreiben.


#!/bin/sh
IP=`/sbin/ifconfig|/usr/bin/awk '/z-/{sub(/:/," ");print$3}'`
echo "$IP" > /home/frer/curip
exit


Wenn ich das Script einfach ausführe dann geht das wunderbar, kopiere ich es allerdings in das Verzeichnis ip-up.d dann geht es nicht. Er schreibt dann zwar die Datei /home/frer/curip, aber diese ist leer.
Das Script heisst ipcur, hat somit also keine Punkt im Namen und wird von run-parts ausgeführt.
Hat jemand einen Tip?

Vielen Dank im Vorraus

tictactux
08.12.04, 07:18
Nur eine Idee: vielleicht scheitert es daran, daß zum Zeitpunkt
des Aufrufs dieses Scripts das Interface noch nicht "up" ist,
und noch keine IP-Adresse hat.
Gibt's denn keine 'post-up'-Scripte ?
Gruss,
Wolfgang

Natty
08.12.04, 07:26
Danke für die Antwort, daran scheint es nicht zu liegen, ich habe mal ein sleep 10 vor das script gesetzt und es geht dann auch nicht...
Mittlerweile habe ich sogar ein "Zwischenscript" geschrieben welches dann das eigentliche Script aufruft ---> auch Fehlanzeige. :confused:

tictactux
08.12.04, 07:34
Schreib doch einfach mal die ganze Ausgabe von ifconfig in die
Log-Datei:

ifconfig > /home/frer/curip

Natty
08.12.04, 07:45
#!/bin/sh
IP=`/sbin/ifconfig`

echo "$IP" > /home/frer/curip
exit


Das geht. Die Variable hab ich extra dringelassen, um zu sehen ob es daran liegt. Es scheint aber an der Nachbearbeitung der Ifconfigausgabe zu liegen. Nur warum? :ugly:
Ich bräuchte die Ip in Reinform.
Gibt es vielleicht noch eine andere Möglichkeit an die externe ip zu kommen?

tictactux
08.12.04, 17:05
Noch ein Versuch zwecks Diagnose: ersetze das print$3 durch print$0,
und schau ob das sub() wie erwartet funktioniert.

Natty
09.12.04, 14:05
Hm, lustigerweise funktioniert jetzt das Kommando

# /sbin/ifconfig|/usr/bin/awk '/z-/{sub(/:/," ");print$3}'
gar nicht mehr wenn ich es einfach in die Shell eingebe. Mit $0 auch nicht. Das ist wirklich rätselhaft. Ich hab nicht mal rebootet in der Zwischenzeit...
Ich hab es jetzt so gemacht:
#!/bin/sh
IP=`lynx -dump checkip.dyndns.org | sed 's/[^0-9]*//' | grep .`
echo "$IP" > /home/frer/curip
exit

Das funktioniert, auch in ip-up.d...

tictactux
09.12.04, 14:39
Hm, lustigerweise funktioniert jetzt das Kommando
# /sbin/ifconfig|/usr/bin/awk '/z-/{sub(/:/," ");print$3}'
gar nicht mehr wenn ich es einfach in die Shell eingebe. Mit $0 auch nicht.
Dazu müßte man die Ausgabe von ifconfig sehen: Du vergleichst
mit dem Muster /z-/ welches bei mir z.B. nirgendwo in der Ausgabe
auftaucht...

Natty
09.12.04, 15:49
~$ /sbin/ifconfig
eth0 Protokoll:Ethernet Hardware Adresse 00:50:FC:E3:18:84
inet Adresse:192.168.0.1 Bcast:192.168.0.255 Maske:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5159683 errors:0 dropped:0 overruns:0 frame:0
TX packets:10109881 errors:0 dropped:0 overruns:2 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:100
RX bytes:388710437 (370.7 MiB) TX bytes:1112236136 (1.0 GiB)
Interrupt:10 Basisadresse:0xaf00

eth1 Protokoll:Ethernet Hardware Adresse 00:04:18:AE:8D:D2
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:27482619 errors:0 dropped:0 overruns:0 frame:0
TX packets:26475555 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:100
RX bytes:1521025416 (1.4 GiB) TX bytes:3469701962 (3.2 GiB)
Interrupt:11 Basisadresse:0x8000

lo Protokoll:Lokale Schleife
inet Adresse:127.0.0.1 Maske:255.0.0.0
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:23404 errors:0 dropped:0 overruns:0 frame:0
TX packets:23404 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:0
RX bytes:1234296 (1.1 MiB) TX bytes:1234296 (1.1 MiB)

ppp0 Protokoll:Punkt-zu-Punkt Verbindung
inet Adresse:213.39.148.35 P-z-P:213.191.84.196 Maske:255.255.255.255
UP PUNKTZUPUNKT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:5753579 errors:0 dropped:0 overruns:0 frame:0
TX packets:5117633 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:3
RX bytes:3960585194 (3.6 GiB) TX bytes:1394210962 (1.2 GiB)


Das ist die Ausgabe von ifconfig. Ich muss zugeben dass ich die Methode die Ip auszugeben irgendwo abgeschrieben habe ohne mich näher damit zu beschäftigen. Es hat aber immer funktioniert. Seit gestern geht es auch in der Shell nicht mehr, nicht nur im ip-up.d script...

tictactux
09.12.04, 16:04
ppp0 Protokoll:Punkt-zu-Punkt Verbindung
inet Adresse:213.39.148.35 P-z-P:213.191.84.196 Maske:255.255.255.255
UP PUNKTZUPUNKT RUNNING NOARP MULTICAST MTU:1492 Metric:1
RX packets:5753579 errors:0 dropped:0 overruns:0 frame:0
TX packets:5117633 errors:0 dropped:0 overruns:0 carrier:0
Kollisionen:0 Sendewarteschlangenlänge:3
RX bytes:3960585194 (3.6 GiB) TX bytes:1394210962 (1.2 GiB)

Das erklärt einiges :D. Ob Dein Script funktioniert hängt davon
ab, welche Spracheinstellung (locales) gerade wirksam ist.
In Deutsch "P-z-P" in Englisch "p-t-p". Root-Scripte laufen meist mit
LANGUAGE=C um sowas zu vermeiden.
Teste das in der Befehlszeile mit:
LANGUAGE=de_DE ifconfig
LANGUAGE=C ifconfig

Um sicherzugehen, schreibe am Anfang des Scriptes:
LANGUAGE=C
export LANGUAGE
Ändere das Muster /z-/ entsprechend z.B. in /P-t-P/
(prüfe ob groß/kleingeschrieben).

Gruss,
Wolfgang

EDIT: um das unabhängig von der LANGUAGE zu machen, könnte
auch folgendes gehen:

#/sbin/ifconfig ppp0|/usr/bin/awk '/inet/{sub(/:/," ");print$3}'

Natty
09.12.04, 16:47
Arg :ugly: , alles klar.
Vielen Danke für deine Hilfe.

Gruß Natty