Moin Moin!
my $ipadr =
exec /sbin/ifconfig | grep ippp0 -A 1 | grep "inet Adresse" | cut -d: -f2 | cut -d" " -f1
;
chomp($ipadr);print "http://$ipadr";
Oh je! Für grep und cut brauchst Du keine externen Programme, das kann Perl von sich aus. Dein Script setzt außerdem voraus, dass ifconfig deutsche Meldungen ausgibt, das passiert aber nur, wenn das Environment passend eingestellt ist. Und du läßt Dir Daten aller Interfaces ausgeben, willst aber nur ippp0 wissen. Und was soll das exec?
my $ipadr;
open PIPE,'/sbin/ifconfig ippp0' or die "ifconfig failed: $!";
while (<PIPE>) {
if (/\binet.*?:(\d+\.\d+\.\d+\.\d+)/) {
$ipadr=$1;
last;
}
}
close PIPE;
if ($ipadr) {
print "http://$ipadr";
} else {
die "ISDN offline";
}
Abhängig von Deiner Distribution kannst Du Dir das Leben noch DEUTLICH leichter machen, wenn Du dich in die ifup/ifdown-Scripte einklinkst (typischerweise /etc/ppp/ip-up und /etc/ppp/ip-down, siehe http://ppp.samba.org/ppp/pppd.html). Dort kannst Du im Up-Script die IP-Adresse in eine Datei schreiben (z.B. echo "$4" > "/var/run/$1.addr") und im Down-Script die Datei wieder löschen (rm -f "/var/run/$1.addr").
Wann immer Du auf deine ISDN-IP-Adresse zugreifen willst, versuchst Du /var/run/ippp0.addr zu öffnen. Geht das schief, ist ISDN down, ansonsten enthält die Datei die IP-Adresse:
open FILE,'<','/var/run/ippp0.addr' or die "ISDN down ($!)";
my $ipadr=<FILE>;
close FILE;
print "http://$ipadr";
Oder ganz ohne Perl in Shell-Scripten:
ipadr=$(cat /var/run/ippp0.addr 2> /dev/null)
if [ "$ipadr" != "" ] ; then
echo "http://$ipadr"
else
echo "ISDN offline" 1>&2
exit 1
fi
Alexander
Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so".