Home · Kontakt · Impressum
contents index previous up next
Next: 8. Benutzerverwaltung Up: 7.7 Suchen und Ersetzen Previous: 7.7.8 patch

Unterabschnitte



7.7.9 Praxisbeispiel: Patchen von Programmen

Das Patchen von Programmen hat viele Vorteile. So muß z. B. nicht das ganze Programm heruntergeladen oder per eMail versandt werden. Außerdem enthält der Patch nur die Änderungen im Programm. So muß ein Mitautor nicht erst mühselig im Programm die Änderungen suchen, sondern sie werden ihm komprimiert übergeben.

Als Beispiel schauen wird uns zwei Versionen eines Perl-Skripts an.

Listing 7.1   div.pl

   1: #!/usr/bin/perl
   2: 
   3: # Dieses Programm teilt zwei Zahlen durcheinander
   4: 
   5: # Eingabe
   6: print "Zähler: ";
   7: $z = <STDIN>;
   8: chomp($z);
   9: print "Nenner: ";
  10: $n = <STDIN>;
  11: chomp($n);
  12: 
  13: # Verarbeitung
  14: $erg = int($z / $n);
  15: $rest = "Rest ". ($z % $n);
  16: 
  17: # Ausgabe
  18: print "$z / $n = $erg $rest\n";
  19: 
  20: exit(0);

Listing 7.2   div2.pl

   1: #!/usr/bin/perl
   2: 
   3: # Dieses Programm teilt zwei Zahlen durcheinander
   4: # Version 2
   5: 
   6: # Eingabe
   7: print "Zähler: ";
   8: $z = <STDIN>;
   9: chomp($z);
  10: print "Nenner: ";
  11: $n = <STDIN>;
  12: chomp($n);
  13: 
  14: # Verarbeitung
  15: # Verarbeitung nur, wenn der Nenner ungleich Null ist
  16: if ($n != 0) {
  17:   $erg = int($z / $n);
  18:   $rest = "Rest ". ($z % $n);
  19: } else {
  20:   $erg = "unendlich";
  21:   $rest = "";
  22: }
  23: 
  24: # Ausgabe
  25: print "$z / $n = $erg $rest\n";
  26: 
  27: exit(0);

diff liefert uns nun die Unterschiede der beiden Skripte.

tapico@defiant:~/perl > diff div.pl div2.pl
3a4
> # Version 2
14,15c15,22
< $erg = int($z / $n);
< $rest = "Rest ". ($z % $n);
---
> # Verarbeitung nur, wenn der Nenner ungleich Null ist
> if ($n != 0) {
>   $erg = int($z / $n);
>   $rest = "Rest ". ($z % $n);
> } else {
>   $erg = "unendlich";
>   $rest = "";
> }

Manuell können mit diesen Informationen nun die Änderungen an der Datei div.pl durchgeführt werden.

Da dies bei größeren Projekten doch problematisch ist, kann auch ein Skript für den Editor ed erstellt werden.

tapico@defiant:~/perl > diff -e div.pl div2.pl
14,15c
# Verarbeitung nur, wenn der Nenner ungleich Null ist
if ($n != 0) {
  $erg = int($z / $n);
  $rest = "Rest ". ($z % $n);
} else {
  $erg = "unendlich";
  $rest = "";
}
.
3a
# Version 2
.

Wenn Sie die Ausgabe als Datei gespeichert haben, kann nun jemand anders mit dem Editor ed die alte Datei (div.pl) mit dem Patch (hier die Datei div.patch) bearbeiten und daraus die neue Datei (div2.pl) erstellen.

barclay@enterprise:~/projekt > (cat div.patch; echo w div2.pl) | ed - div.pl

Dies setzt aber voraus, daß an der alten Datei nichts geändert worden ist. Daher gibt es zwei andere Formate, die mehr Sicherheit beim Patchen versprechen.

7.7.9.0.1 Context Diff

tapico@defiant:~/perl > diff -c div.pl div2.pl
*** div.pl	Sun Sep 23 14:36:48 2001
--- div2.pl	Sun Sep 23 14:36:12 2001
***************
*** 1,6 ****
--- 1,7 ----
  #!/usr/bin/perl
  
  # Dieses Programm teilt zwei Zahlen durcheinander
+ # Version 2
  
  # Eingabe
  print "Zähler: ";
***************
*** 11,18 ****
  chomp($n);
  
  # Verarbeitung
! $erg = int($z / $n);
! $rest = "Rest ". ($z % $n);
  
  # Ausgabe
  print "$z / $n = $erg $rest\n";
--- 12,25 ----
  chomp($n);
  
  # Verarbeitung
! # Verarbeitung nur, wenn der Nenner ungleich Null ist
! if ($n != 0) {
!   $erg = int($z / $n);
!   $rest = "Rest ". ($z % $n);
! } else {
!   $erg = "unendlich";
!   $rest = "";
! }
  
  # Ausgabe
  print "$z / $n = $erg $rest\n";

7.7.9.0.2 Unified Diff

tapico@defiant:~/perl > diff -u div.pl div2.pl
--- div.pl	Sun Sep 23 14:36:48 2001
+++ div2.pl	Sun Sep 23 14:36:12 2001
@@ -1,6 +1,7 @@
 #!/usr/bin/perl
 
 # Dieses Programm teilt zwei Zahlen durcheinander
+# Version 2
 
 # Eingabe
 print "Zähler: ";
@@ -11,8 +12,14 @@
 chomp($n);
 
 # Verarbeitung
-$erg = int($z / $n);
-$rest = "Rest ". ($z % $n);
+# Verarbeitung nur, wenn der Nenner ungleich Null ist
+if ($n != 0) {
+  $erg = int($z / $n);
+  $rest = "Rest ". ($z % $n);
+} else {
+  $erg = "unendlich";
+  $rest = "";
+}
 
 # Ausgabe
 print "$z / $n = $erg $rest\n";

Diese beiden Formate, wie auch die anderen, können mit dem Befehl patch die Veränderung durchführen.

barclay@enterprise:~/projekt > patch < div.c.patch
Die im Patch angegebene Datei (div.pl) ist nun verändert worden.


Notizen:


Notizen:

Textverarbeitung und Textfilter % latex2html id marker 8448
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

Sollte eine Aufgabe zu einer Fehlermeldung führen, kann das von mir gewollt sein! Prüfen Sie aber dennoch, ob Sie keinen Tippfehler gemacht haben, und ob die Voraussetzungen wie in der Aufgabenstellung gegeben sind. Auch sollten keine Verzeichniswechsel ausgeführt werden, wenn dies nicht ausdrücklich in der Aufgabe verlangt wird! Notieren Sie die Ergebnisse auf einem seperaten Zettel.

 

235
Loggen Sie sich als Walter ein!
236
Führen Sie den Befehl rm -rf * aus.
237
Kopieren Sie aus dem Verzeichnis /usr/share/man/man1 die Datei less.1.gz ins Heimatverzeichnis.
238
Erzeugen Sie aus der Datei less.1.gz die HTML-Datei less.html.
239
Lassen Sie sich den Inhalt der Datei less.html seitenweise anzeigen!
240
Erzeugen Sie mit dem vi eine Textdatei, die mindestens 3 Zeilenvorschübe beinhaltet (4 Zeilen lang)! Name der Datei: funny !
241
Kopieren Sie die Datei /usr/share/man/man1/more.1.gz in Ihr Heimatverzeichnis und machen Sie wie in Aufgabe 4 eine HTML-Datei daraus.
242
Lassen Sie sich Inhalt von more.html und funny in Ihrem Heimatverzeichnis nacheinander seitenweise auf dem Bildschirm anzeigen, dazu ist nur ein Befehl einzugeben!
243
Erstellen Sie mit einem einzigen Befehl aus den Dateien more.html und funny eine neue Datei namens hummer.
244
Lassen Sie sich den Inhalt von hummer anzeigen.
245
Löschen Sie die Dateien funny und hummer in Ihrem Heimatverzeichnis!
246
Wie lauten die letzten (10) Zeilen der Datei less.html.
247
Lassen Sie sich den Inhalt der Datei less.html in oktaler Form anzeigen!
248
Kopieren Sie alle Dateien, die mit `mc' beginnen, aus dem Verzeichnis /usr/share/man/man1/ in Ihr Heimatverzeichnis.
249
Wandeln Sie wie in Aufgabe 4 die kopierten Dateien in HTML-Dateien.
250
Lassen Sie sich die ersten 5 Zeilen der Datei mcopy.html anzeigen.
251
Wieviele Wörter und Zeilen enthält die Datei more.html?
252
Welche Datei im Heimatverzeichnis enthält die Zeichenkette `Midnight'?
253
Schauen Sie sich die Datei /etc/passwd an.
254
Wieviele Zeilen enthält sie?
255
Lassen Sie sich die ersten 20 Zeilen der Datei /etc/passwd numeriert anzeigen.
256
Geben Sie die erste Spalte der Datei /etc/passwd aus.
257
Geben Sie sortiert die erste Spalte der Datei /etc/passwd aus.
258
Geben Sie sortiert die erste Spalte der Datei /etc/passwd aus und speichern Sie das Ergebnis in der Datei ~/passwd.sort.

% latex2html id marker 8522
\framebox{
\parbox{161mm}{
\parbox{25mm}{\Large \...
...25mm}{\Large ~ \hfill
\arabic{arbeitsblatt}.\arabic{arbeitsblattseite}
}
}
}

 

259
Schreiben Sie den Inhalt der Datei /etc/passwd in umgekehrter Zeilenfolge in die Datei ~/passwd.reverse.
260
Vergleichen Sie die CRC-Checksummen von /etc/passwd, ~/passwd.sort und ~/passwd.reverse.

261
Lassen Sie sich die Logdatei für Warnmeldungen des Systems /var/log/warn anzeigen. Welche Bedeutung haben wohl die einzelnen Spalten?
262
Lassen Sie sich alle Zeilen von heute ausgeben.
263
Lassen Sie sich alle Zeilen vom letzten Arbeitstag ausgeben.
264
Wieviele Warnmeldungen gab es?
265
Geben Sie die beiden ersten Spalten aus.
266
Geben Sie die beiden ersten Spalten aus, entfernen Sie alle doppelten Zeilen.
267
Lassen Sie sich anzeigen, wieviele Warnmeldungen es pro Tag gab.
268
Sortieren Sie diese Liste absteigend nach der Häufigkeit.

269
Verfassen Sie mit dem Editor vi eine Botschaft an Ihren Nachbarn und speichern Sie diese in der Datei gutenachricht.txt.
270
Verschlüsseln Sie den Inhalt der Datei mit dem ROT13-Verfahren und speichern Sie das Ergebnis in der Datei gutenachricht.krypto.
271
Senden Sie Ihrem Nachbarn die Datei zu. (eMail, FTP, Turnschuhnetz etc.)
272
Entschlüsseln Sie die Nachricht Ihres Nachbarn.
273
Was bedeutet der Satz ``Qvr Nhstnora fvaq sregvt''?


Notizen:


contents index previous up next
Next: 8. Benutzerverwaltung Up: 7.7 Suchen und Ersetzen Previous: 7.7.8 patch
  © 2004 by IT-Dozent Ole Vanhoefer · Zum Seitenanfang