Top-Themen

Aktuelle Themen (A bis Z)

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Perl-Script gibt leere Variable in Datei aus...

Mitglied: l0c4lhost

l0c4lhost (Level 1) - Jetzt verbinden

24.10.2005, aktualisiert 28.10.2005, 7350 Aufrufe, 11 Kommentare

Hi, hab hier ein Script, mit dem ich Mozilla-Profil-Dateien lokal auf einen Server kopieren möchte. Das funktioniert auch soweit super, bloss möcht ich mir zum Schluss noch die Variable $pos in eine Datei schreiben lassen, da ich diese noch später für Mozilla brauche. Eigentlich müsste diese Variable beinhalten, wohin der/die Ordner kopiert werden/wurden, als Beispiel K:\Home\Profiles\User. Stattdessen wird aber nix in die Profiles.ini geschrieben Danke für sämtliche geistreiche Ergüsse!!!

MFG, 127.0.0.1

<font class="code">#! C:\perl\bin\perl.exe -w

use File::Find;
use Win32;

my $user = Win32::LoginName;
my $pos = "";
my $path_home = 'c:/Dokumente und Einstellungen/'.$user.'/Anwendungsdaten/Mozilla/Profiles';
my $path_server_perl = 'K:/Home/Profiles';
my $path_server_win = 'K:\\Home\\Profiles';
my $path_profile;
my $search_var = "bookmarks.html";
my $ini = 'C:/Dokumente und Einstellungen/'.$user.'/Anwendungsdaten/Thunderbird/profiles.ini';

find(\&wanted, ''.$path_server_perl.'');
$pos =~ s/\//\\/g;

if (!(open(OUTFILE, ">>$ini"))) {
print "Datei konnte nicht geöffnet werden.";
}

if (!(open(TEST, "<".$pos."/".$search_var.""))) {
mkdir ($path_server_perl);
system("xcopy \/E \/Y \/V \"".$path_home."\" ".$path_server_win."");
print OUTFILE "Hier die Pfade zum Profil";
}
close TEST;

close OUTFILE;

exit(0);

  1. sub routinen
sub wanted{
$pos = $File::Find::dir if $_ eq "".$search_var."";
return $pos;
}
</font>
Mitglied: Atti58
25.10.2005 um 08:39 Uhr
... wenn Du Zeile 25 änderst in:

print OUTFILE "$pos\n";

wird $pos auch in Deine INI-Datei geschrieben, so ist es jedenfalls bei mr.

Wie programmierst / debuggst Du denn, benutzt Du "PTKDB"? Ich konnet nicht alles nachvollziehen und musste die if(!open(TEST ... - system(... - Anweisungen auskommentieren, denke aber, dass sonst alles richtig ist und eigentlich laufen müsste,

Gruß

Atti.
Bitte warten ..
Mitglied: 11078
25.10.2005 um 09:01 Uhr
Hallo,

zunächst einmal: finde ich supi, dass noch jemand Perl für Win32 Aufgaben verwendet. Ich habe das früher auch öfter gemacht, meistens in Verbindung mit perlapp aus dem Perl Development Kit von Activestate.

Aber nun zum Problem.

So wie ich das sehe, schreibst Du doch die Variable $pos nirgendwo rein ?! Die Sub &wanted gibt jedenfalls eine richtig zugewiesene $pos aus, das habe ich getestet.

<font class="code">
if (!(open(OUTFILE, ">>$ini"))) {
print "Datei konnte nicht geöffnet werden.";
}
</font>

Was Du hier machst, heißt doch in etwa: Wenn die Datei/der Handle Outfile nicht geöffnet ist, dann mach... und das macht es auch: Bei mir wird immer ausgegeben: "Datei konnte nicht geöffnet werden"...weil sie es auch nirgendwo wird!

irgendwo müsste ja mal ein: open(OUTFILE,">>"$ini") kommen, mit der die profiles.ini wirklich mal zum Schreiben geöffnet wird...


Hoffe, das hat geholfen!

Gruß,
Tim
Bitte warten ..
Mitglied: Atti58
25.10.2005 um 09:18 Uhr
... na, so ganz stimmt das nicht, dass er die Variable nicht füllt - Du hast wohl die Subroutine übersehen ...

OUTFILE wird ja nur geöffnet, wenn:

my $ini = 'C:/Dokumente und Einstellungen/'.$user.'/Anwendungsdaten/Thunderbird/profiles.ini';

existiert ...

Aber sonst gebe ich Dir Recht, Perl ist auch heute noch unschlagbar gegenüber BATCH-Programmierung - besonders wenn man ein wenig "Pattern-Matching" kann,

Gruß

Atti.
Bitte warten ..
Mitglied: 11078
25.10.2005 um 10:23 Uhr
Hi Atti,

hab doch gar nicht gesagt, dass er die Variable nicht füllt:

[ZITAT]
So wie ich das sehe, schreibst Du doch die Variable $pos nirgendwo rein ?! Die Sub &wanted gibt jedenfalls eine richtig zugewiesene $pos aus, das habe ich getestet.
[/ZITAT]



Aber dennoch richtig: die Datei existierte bei mir auch nicht, deshalb waren für meine Umgebungsverhältnisse die Negation des if-Statements ziemlich fatal (mal ganz davon abgesehen, dass auch der ordner "Thinderbird" bei mir nicht existiert). Wenn man nicht davon ausgehen kann, dass die Datei existiert, müsste man das umschreiben und vorher prüfen.

Wenn ich es mir nochmal anschaue, kann ich also Atti nur zustimmen: Das einzige, was in die ini geschrieben wird ist nach dem Code ganz offensichtlich nur "Hier die Pfade zum Profil". Flüchtigkeitsfehler also.


Gruß,
Tim

P.S.: Eine gute Adresse für Perl ist auch http://www.perlboard.de/ . Werde den Link mal hier eintragen, wenn er noch nicht existiert...
Bitte warten ..
Mitglied: l0c4lhost
25.10.2005 um 11:36 Uhr
Hallo,

erstmal danke für die rege Beteiligung an meinem Problem!!!

Wie beim ersten Comment beschrieben, habe ich Zeile 25 in print OUTFILE "$pos \n"; geändert. Beim Script-Ablauf hat sich aber leider nichts geändert. In der Profiles.ini wird durch das \n nur eine Leerzeile eingefügt. Ich habe die Vermutung, dass die Variable $pos leer ist, obwohl eigentlich der Pfad zu dem Profil drinstehen müsste!?
Und so langsam gehen mir die Ideen aus

Danke für die Hilfe!
Bitte warten ..
Mitglied: 11078
25.10.2005 um 11:44 Uhr
Hallo,


ch habe die
Vermutung, dass die Variable
$pos leer ist, obwohl
eigentlich der Pfad zu dem Profil drinstehen
müsste!?
Und so langsam gehen mir die Ideen aus


Wie geschrieben, ich habe das Script mal kurz laufen lassen (heute morgen) und bei mir hat $pos einen Inhalt gehabt; glaube aber erst, nachdem ich folgendes Konstrukt, das mir einfach nicht geläufig war, aufgelöst habe:

<font class="code">
    1. sub routinen
    sub wanted{
    $pos = $File::Find::dir if $_ eq "".$search_var."";
    return $pos;
    }
    </font>

    Dieses if-Statement in der dritten Zeile hab ich nicht wirklich kapiert und konnte mir auch (trotz Ausbleiben einer Fehlermeldung) nicht ganz vorstellen, dass dies so richtig ist. Schreib mal folgendes und sieh nach, ob die Variable dann einen Pfad zurückgibt:

    <font class="code">
      1. sub routinen
      sub wanted{
      $pos = $File::Find::dir;
      return $pos;
      }
      </font>

      Gruß,
      Tim
Bitte warten ..
Mitglied: Atti58
25.10.2005 um 12:03 Uhr
@tim

Sorry, ich habe Dein Post dann wohl falsch verstanden ...

... bei mir hat das Übergeben der $pos-Variable geklappt (mit leicht veränderten Pfaden natürlich) ...

Mein Erster Gedanke beim Lesen Deines Problems war allerdings die "Gültigkeit von Variablen" - normalerweise gelten Variablen, wenn sie nicht global deklariert wurden, in Subroutinen nicht bzw. haben dort einen anderen Wert. Du kannst ja das Konstrukt:

$pos=&wanted;

im Hauptprogramm benutzen, um die Variable zu füllen

Warum beantwortet man nur meine Fragen nie ? Benutzt Du einen Debugger? Mit PTKDB kann man nämlich schön verfolgen, welchen Weg das Programm geht und welche Werte die Variablen haben,

Gruß

Atti.
Bitte warten ..
Mitglied: 11078
25.10.2005 um 12:48 Uhr
Hi Ho!


Warum beantwortet man nur meine Fragen nie
? Benutzt Du einen Debugger? Mit PTKDB
kann man nämlich schön verfolgen,
welchen Weg das Programm geht und welche
Werte die Variablen haben,

Den kannte ich noch nicht, sieht aber klasse aus (hab es für den späteren Test mal gebookmarkt)!

Trag den doch mal als Link in diesem Bereich ein!

Gruß,
Tim
Bitte warten ..
Mitglied: l0c4lhost
25.10.2005 um 14:25 Uhr
Oh, sry, die Frage nach dem Debugger/Programm, mit dem ich scripte, hab ich total vergessen. Ich nehme Notepad2. Mit dem kam ich eigentlich bisher immer hin, werd mir aber trotzdem mal PTKDB anschauen.
Den Lösungsvorschlag hab ich jetzt noch nicht ausprobiert, werd ich aber noch machen und euch davon berichten. THX!
Bitte warten ..
Mitglied: Atti58
25.10.2005 um 14:26 Uhr
@Tim

... Link ist vorgeschlagen, jetzt muss Frank Scholl nur noch sehen, ob er ihn verwenden darf,

Gruß

Atti.
Bitte warten ..
Mitglied: r00t
28.10.2005 um 14:55 Uhr
Also ich würde das so lösen

#!/usr/bin/perl -W

use strict;
use warnings;

use File::Find;
use Win32;

  1. vars
my $user = Win32::LoginName;
my $pos = undef; # Immer mit undef initialisieren; ist schoener.
my $path_home = "C:/Dokumente und Einstellungen/$user/Anwendungsdaten/Mozilla/Profiles";

  1. Das hier kann man kuhler machen, man kann den Delimiter bestimmen, frag mich aber nicht, wie das geht.
my $path_server_perl = 'K:/Home/Profiles';
my $path_server_win = 'K:\\Home\\Profiles';

my $path_profile = undef;
my $search_var = "bookmarks.html";
my $ini = "C:/Dokumente und Einstellungen/$user/Anwendungsdaten/Thunderbird/profiles.ini";

find(\&wanted, $path_server_perl);

  1. Das hier koenntest du dir sparen, wenn du das mit dem Delimiter machst.
$pos =~ s/\//\\/g;

  1. Ich drehe hier mal die Reihenfolge...
  2. Hm, ich verstehe hier nicht, was du da machen willst oder machst.
if(! -d $path_server_perl){
mkdir($path_server_perl);
system("xcopy /E /Y /V $path_home $path_server_win");
}
  1. Sollte eigentlich prima gehen. Ich verstehe die ganzen Backslashes nicht.

  1. Hier wuerde ich das einfacher schreiben:
          1. Mit einem Pfeil (>) wuerde die Datei ueberschrieben. Ich denke, das ist, was du brauchst.
          2. Ich weiss es aber nicht so genau.
          3. Mit einem doppeltem Pfeil (>>) waere es ranhaengen.

          1. Und dann glaube ich, dass du hier Sachen doppelmoppelst. Ich mach' mal, wie ich das denke.

                  1. Jedenfalls schreibst du hier gar nichts in die ini rein.
                  2. So in etwa muesste das aussehen:
          open(WRITE_INI, ">$ini") or warn "Could not open file $ini: $!"; # sprechende Fehler Benutzen! ($!)
          print WRITE_INI "$pos/$search_var";
          close WRITE_INI;

          exit(0);

          1. helper apps
        sub wanted(){
        return unless -f $_;
                1. Ich glaube, Find::dir ist hier falsch?
                2. Du willst doch nach bookmarks.html suchen?
        $pos = $File::Find::dir;
        return $pos;
        }
Bitte warten ..
Ähnliche Inhalte
Batch & Shell

Meltdown Microsoft Prüf Script - .zip Datei leider leer

gelöst Frage von MasterBlaster88Batch & Shell13 Kommentare

Hallo zusammen, ich patche gerade unsere Windows Server bzgl. der Meltdown Lücke. Patch vorhanden, Reg Keys gesetzt Um das ...

VB for Applications

Wenn bestimmte Datei leer dann Script ausfürhen sonst nicht

gelöst Frage von aletriVB for Applications10 Kommentare

Guten Abend allerseits Dieser Script löscht einen bestimmten Eintrag in der Scener.cfg des Flugsimulators und funktioniert soweit: Nun sollte ...

Batch & Shell

Linux bash script: Datei verschieben nur wenn Zielverzeichnis leer

gelöst Frage von ole-objektBatch & Shell2 Kommentare

Hallo! ich steh gerade total auf dem Schlauch: Ich muss in einem Skript viele Dateien in ein bestimmtes Verzeichnis ...

Perl

Perl script zur Auswertung einer Telefonanlage

gelöst Frage von Fl0wMAGPerl2 Kommentare

Hallo leute, ich bin seit einiger Zeit in der Ausbildung zum Systemintegrator und soll da doch bitte mal in ...

Neue Wissensbeiträge
Internet

Schwarzer Tag für die Netzfreiheit: Die Urheberrechtsreform wurde einfach so abgenickt - und damit auch die bisherige Freiheit im Internet

Information von Frank vor 2 MinutenInternet

Ich zitiere einfach mal Julia Reda von den Piraten, da mir selbst einfach die Worte dazu fehlen: Schwarzer Tag ...

Internet
Ist zwar keien Anleitung, aber
Anleitung von SachsenHessi vor 49 MinutenInternet

oder doch eine Anleitung ? Für die nächste EU-Wahl ? SH

PHP
Pfsense - Vouchergenerator 1.6.1
Anleitung von cafepost vor 1 StundePHP

Hallo Zusammen , aus Sicherheitsgründen wurde mein Server auf den neuesten Stand gebracht, jetzt wollte ich den Vouchergenerator 1.6.1 ...

Internet

Verlag protestiert gegen Artikel 13 (jetzt Artikel 17) der geplanten EU-Verordnung

Information von Dilbert-MD vor 5 StundenInternet

Leider etwas spät, aber immerhin hat auch der heise-Verlag eingesehen, dass die Umsetzung der Urheberrechtsreform - so wie sie ...

Heiß diskutierte Inhalte
Voice over IP
Mikrotik: Voip mit SIP Phones in verschiedenen Subnetzen mit FritzBox
Frage von SpartacusVoice over IP15 Kommentare

Hallo, ich habe das Problem, dass ich verschiedene SIP-Clients in unterschiedlichen Subnetzen habe, die mit meinem Server FritzBox7412 keine ...

Grafik
Viele Fotos organisieren - Windows Dateisystem zu lahm bzw. überfordert
Frage von augustaparkGrafik12 Kommentare

Hallo und Guten Morgen, hat einer eine Idee, wie man viele Fotos sinnvoll und effizient organisieren kann? Wir haben ...

Windows 10
22 Notebooks automatisch konfigurieren und Software installieren - womit?
gelöst Frage von ipzipzapWindows 1012 Kommentare

Hallo, ich habe für ein Projekt 22 nagelneue Notebooks mit Windows 10 bekommen, die ich alle im Großen und ...

Windows Server
Windows 2012 R2 - Skript um Druckerkonfiguration auszulesen und zu setzen
gelöst Frage von Der-PhilWindows Server11 Kommentare

Hallo! Kennt ihr eine Möglichkeit, per Skript die Konfiguration eines Druckers auszulesen und auf einen anderen anzuwenden? Hintergrund: Ich ...