Der Hammer: Perl in der Kaffeepause
Manches Installationsskript fordert den Benutzer zu interaktiven Eingaben auf. Meist reicht es, auf die [Enter]-Taste zu hämmern. Genau das ist es, was die Funktion »hammer()« macht. Ein typisches Beispiel ist der Perl-Build: Man lädt den Tarball von »perl.com«, entpackt ihn, springt ins oberste Verzeichnis, startet »./Configure« - und sieht sich mit tausend Fragen konfrontiert. Wer sicher ist, dass immer die voreingestellte Antwort passt, gibt entweder die Option »-d« an oder beginnt selbst auf die Eingabetaste zu hämmern.
Das »mkperl«-Skript in Listing 3 lädt den aktuellen stabilen Perl-Tarball mit »download()« von »perl.com«, entpackt das Archiv mit »untar()«, konfiguriert die Release und startet den Build. Es nutzt die »-d«-Option (verwende De-faultwerte) von »Configure«, da sich bei der Perl-Konfiguration nicht immer alles durchhämmern lässt, aber setzt »hammer()« für den letzten Prompt ein. An dieser Stelle fragt das Configure-Skript, ob der Benutzer eine Shell starten möchte, um die entstandene »config«-Datei manuell noch weiter zu editieren. Der automatisierte Druck auf die [Enter]-Taste verneint dies und schließt die Konfiguration ab.
01 #!/usr/bin/perl
02 # mkperl - Download, configure and install
03 # the latest stable perl,
04
05 use strict;
06 use warnings;
07 use Log::Log4perl qw(:easy);
08 Log::Log4perl->easy_init($DEBUG);
09 use Sysadm::Install qw(download
10 hammer untar cd sysrun);
11
12 download "http://www.perl.com/" .
13 "CPAN/src/stable.tar.gz";
14 untar "stable.tar.gz";
15 cd "stable";
16 hammer("./Configure", "-d", "-D",
17 "prefix=/home/mschilli/PERL-test");
18 sysrun("make install");
|
Manchmal brauchen Skripte eine Bestätigung vom Benutzer: Stimmt der Defaultwert oder welche der fünf angebotenen Dateien ist die richtige? Dazu stellt Sysadm::Install die Funktionen »ask« und »pick« bereit. »ask« fragt den Benutzer einfach, ob ein vorgegebener Text übernommen oder neu eingegeben werden soll. »pick« stellt eine Reihe von Optionen zur Auswahl, nummeriert sie durch und lässt den Benutzer die gewählte Nummer eingeben. E
Das »input«-Skript (Listing 4) holt vom Anwender erst einen Textstring und lässt ihn eine von drei vorgegebenen Optionen auswählen:
Name [No-Name-Entered]> Bill Gates
Name: Bill Gates
[1] 0-100K
[2] 100K-200K
[3] 300K-
Salary [1]> 3
Salary: 300K-
Die Rückgabewerte von »ask« und »pick« entsprechen dem vom Benutzer eingegebenen beziehungsweise ausgewählten Wert, hier also »Bill Gates« (für den Textstring) und »300K-« (bei der Optionswahl).
01 #!/usr/bin/perl
02 # input -- Test ask() and pick()
03
04 use warnings;
05 use strict;
06
07 use Sysadm::Install qw(:all);
08
09 my $name = ask "Name", "No-Name-Entered";
10 print " Name: $namen";
11
12 my $salary = pick "Salary",
13 ["0-100K", "100K-200K", "300K-"], 1;
14 print " Salary: $salaryn";
|
Wer Perls Einzeiler einsetzt, kennt das Problem, den Perl-Code auf der Kommandozeile vor der gefräßigen Shell zu schützen. Wer naiv
perl -e "print "Hi $USER!n""
eintippt, wird feststellen, dass es nicht funktioniert. Die Shell frisst die inneren Anführungszeichen und den Backslash, das Ausrufezeichen holt vorher ausgeführte Kommandos zurück. Maskiert man die empfindlichen Zeichen mit einem Backslash (und diesen mit einem weiteren Backslash), klappt\'s:
perl -e "print "Hi $USER!\n""
Eine weitere Möglichkeit sind einfache Anführungszeichen, aber dann substituiert die Shell keine Variablen mehr und einfache Anführungszeichen im Code müssen maskiert werden.
Alle Sonderzeichen maskiert
Noch schlimmer wird es, wenn obiges Kommando statt auf dem lokalen Rechner per »ssh -t Rechner Kommando« auf einer anderen Maschine irgendwo im Netz läuft. Dann will jedes Sonderzeichen (und zwar auch die vorher maskierten Sonderzeichen und ihre Maskierer) wiederum maskiert sein. Schon stellt sich das heimelige Gefühl der Backslashitis ein:
ssh -t somehost "perl -e
"print \"Hi\!\\n\"""
Wer derlei Akrobatik scheut, zieht einfach die von Sysadm::Install auf Wunsch exportierte Funktion »qquote()« heran. Sie setzt doppelte Anführungszeichen um einen ihr übergebenen String und maskiert im String enthaltene Quotes und Backslashes. Lautet der zweite ihr übergebene Parameter »:shell«, dann genießen auch das gefährliche Dollarsymbol, bedrohliche Ausrufezeichen und hinterhältige Backquotes ebenfalls diesen Schutz.
Listing 5 definiert ab Zeile 10 ein Skript, das das Kommando »ifconfig« ausführt und die IP-Adressen aller angezeigten Netzwerk-Interfaces extrahiert. Zeile 16 entfernt Zeilenumbrüche und überflüssige Leerzeichen aus dem Skripttext und »qquote()« in Zeile 19 formt daraus einen kompakten, in doppelte Quotes eingeschlossenen String, den das Skript hinter »perl -e« hängt.
01 #!/usr/bin/perl
02 # ips -- run a script on a remote machine
03
04 use warnings;
05 use strict;
06
07 use Sysadm::Install qw(qquote);
08
09 my $script = q{
10 $data = `ifconfig`;
11 while($data =~ /inet addr:(S+)/g) {
12 print "$1n";
13 }
14 };
15
16 $script =~ s/s+/ /g;
17
18 my $cmd = "perl -e " .
19 qquote($script, ":shell");
20
21 $cmd = "ssh -t somehost " .
22 qquote($cmd, ":shell");
23
24 system($cmd);
|
Zeile 22 fügt noch eine »quote()«-Runde für das SSH-Kommando hinzu und schließlich führt »system()« folgendes Kommando aus, das alle IP-Adressen von »somehost« einsammelt, ohne dort permanent ein Skript zu platzieren:
ssh -t somehost "perl -e " \$data =
\`ifconfig\`; while(\$data =~ /in
et addr:(\\S+)/g) { print \"\$1\
\n\"; } ""
Man könnte natürlich genauso gut gleich das Ergebnis von »ifconfig« auf den lokalen Host holen und dort verarbeiten, aber bei größeren Datenmengen zeigen sich die Vorteile eines solchen mobilen Skripts.
| Whitepaper |
|
Daten Migration - Eine Publikation von Bloor Research
Datenmigrationsprojekte überschreiten häufig das Budget, neigen zu Verzögerung und werden unter Umständen komplett abgebrochen. Bloor Research ist eines der weltweit führenden IT-Forschungs-, Analyse- und Beratungsunternehmen und wird in dem vorliegenden White Paper die wichtigsten Aspekte dieser Problematik näher beleuchten. Ferner werden praktische Empfehlungen für erfolgreiche Migrationsprojekte gegeben, die Sie auf Ihr nächstes Projekt übertragen können.
Download PDF (Registrierung erforderlich)
|
|
Open Source Datenintegration in der Praxis: Fallstudien und Anwendungsbeispiele
Über die letzten Jahre hinweg haben sich Open Source Lösungen als fester Bestandteil des gesamten Datenintegrationsmarktes etabliert. Viele Unternehmen haben bereits das Open Source Modell für Ihre Datenintegrationsprojekte aufgegriffen. Das vorliegende White Paper illustriert anhand ausgewählter Fallstudien und Anwendungsbeispiele die Implementierung von Open Source Datenintegration in der Praxis und benennt die daraus resultierenden Vorteile.
Download PDF (Registrierung erforderlich)
|
Dieser Online-Artikel kann Links enthalten, die auf nicht mehr vorhandene Seiten verweisen. Wir ändern solche "broken links"
nur in wenigen Ausnahmefällen. Der Online-Artikel soll möglichst unverändert der gedrucken Fassung entsprechen.
|