Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ patch(1) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

diff(1)

ed(1)

patch(1)                                                           patch(1)

NAME
     patch - Diff-Liste anwenden

SYNTAX
     patch [option ...] [datei] [+ [option ...] [datei]]

BESCHREIBUNG
     patch verwendet eine Korrekturdatei (patch file) mit einer der drei
     Arten von Deltalisten (normal, mit Kontextangabe oder im ed-Format),
     die vom Kommando diff(1) erstellt werden, und wendet diese Deltas auf
     eine Originaldatei an, wodurch eine korrigierte Version erstellt wird.
     Standardmäßig wird die Originaldatei durch die korrigierte Version
     ersetzt. Wenn Sie die Option -b angeben, wird die Originaldatei unter
     demselben Namen mit der Erweiterung .orig gesichert. Mit der Option -o
     können Sie darüber hinaus eine Datei angeben, in die die Ausgabe
     geschrieben werden soll.

     patch versucht beim Start, die Art der Diff-Liste festzustellen,
     sofern diese nicht bereits über die Option -c, -e oder -n festgelegt
     wurde. Diff-Listen mit Kontextangabe und normale Diff-Listen werden
     vom Kommando patch direkt angewandt, während mit der Option -e
     erstellte Diff-Listen einfach über eine Pipe an den Editor ed(1) wei-
     tergeleitet werden.

     Enthält die Korrekturdatei zusätzlichen Text vor und/oder nach den
     Korrekturanweisungen, wird dieser von patch übersprungen. Wenn die
     gesamte Diff-Liste bis zu einer bestimmten Spalte eingerückt ist, wird
     dies berücksichtigt.

     Bei Diff-Listen mit Kontextangabe und teilweise auch bei normalen
     Diff-Listen kann patch inkorrekte Zeilennummern in den Korrekturanwei-
     sungen feststellen und versucht, die korrekte Position zu ermitteln,
     um den entsprechenden Korrekturblock anzuwenden. Zuerst verwendet
     patch die für den Block angegebene Zeilenzahl plus/minus dem Offset,
     der bei der Anwendung des vorherigen Blocks verwendet wurde. Wenn dies
     nicht die korrekte Position ist, sucht patch max. 1000 Byte vorwärts
     und rückwärts nach einer Gruppe von Zeilen, die mit dem Kontext des
     entsprechenden Blocks übereinstimmen. Zuerst sucht patch nach einer
     Position, an der alle Zeilen des Kontextes übereinstimmen. Wenn eine
     solche Position bei einer Diff-Liste mit Kontextangabe nicht gefunden
     wird und der maximale Ungenauigkeitsfaktor auf 1 oder größer gesetzt
     ist, wird ein weiterer Suchlauf durchgeführt, in dem die erste und die
     letzte Kontextzeile ignoriert werden. Wenn dieser Suchlauf fehlschlägt
     und der maximale Ungenauigkeitsfaktor auf 2 oder größer gesetzt ist,
     werden die ersten beiden und die letzten beiden Kontextzeilen in einem
     weiteren Suchlauf ignoriert. (Der standardmäßige maximale Ungenauig-
     keitsfaktor ist 2.)








Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

patch(1)                                                           patch(1)

     Kann patch trotzdem keine Position finden, an der der Korrekturblock
     angewendet werden kann, schreibt es den Block in eine Fehlerdatei. Die
     Datei enthält alle zurückgewiesenen Blöcke und erhält normalerweise
     den Namen der Ausgabedatei mit dem Suffix .rej. Der zurückgewiesene
     Block wird mit Kontextangabe ausgegeben, unabhängig von der Form der
     Korrekturanweisung. Handelt es sich bei der Eingabe um eine normale
     Diff-Liste, fehlen eventuell die Kontextangaben. Die Zeilennummern der
     Korrekturblöcke in der Fehlerdatei können sich von denen in der Kor-
     rekturdatei unterscheiden: Sie geben die ungefähre Position in der
     neuen Datei wieder, an der patch die zurückgewiesenen Blöcke vermutet,
     nicht in der alten.

     Wenn patch einen Korrekturblock abgearbeitet hat, werden Sie darüber
     informiert, ob der Block erfolgreich angewendet oder zurückgewiesen
     wurde. Darüber hinaus wird auch die Zeile (der neuen Datei) ausgege-
     ben, in der patch den Block angewendet hat. Wenn sich die Zeilennummer
     von der in der Diff-Liste angegebenen Zeilennummer unterscheidet, wird
     Ihnen der Offset mitgeteilt. Ein einzelner großer Offset kann ein Hin-
     weis darauf sein, daß der Block an der falschen Position angewendet
     wurde. Sie werden auch darüber informiert, wenn für die Suche ein
     Ungenauigkeitsfaktor verwendet wurde. In diesem Fall sollten Sie eben-
     falls vorsichtig sein.

     Wird patch mit einer ed-Liste aufgerufen, dann wird diese Liste an den
     Editor ed(1) weitergeleitet. Fehlerhafte ed-Anweisungen können nicht
     diagnostiziert werden, so daß in diesem Fall keine Fehlerdatei .rej
     angelegt und auch kein Status 1 zurückgeliefert wird (siehe ENDESTA-
     TUS).

     Ist keine Originaldatei angegeben, versucht patch den Namen der zu
     editierenden Datei anhand des Vorspanns festzustellen. Im Kopf einer
     Diff-Liste mit Kontextangabe findet sich der Dateiname in den mit
     "***" oder "---" beginnenden Zeilen. Kann patch den Dateinamen so
     nicht feststellen, sucht es nach einer Zeile "Index:" und versucht den
     in dieser Zeile enthaltenen Dateinamen zu verwenden. Gefundene Datei-
     namen werden dabei entsprechend der Option -p verkürzt. patch sucht
     die Datei(en) im aktuellen Verzeichnis (bzw. in dem bei -d angegebenen
     Verzeichnis). Wenn die Originaldatei nicht gefunden werden kann,
     jedoch eine passende SCCS- oder RCS-Datei vorliegt, versucht patch,
     diese Datei herauszuholen und zu editieren. Wird im Vorspann kein
     Dateiname erkannt, werden Sie aufgefordert, den Namen der zu korrigie-
     renden Datei einzugeben.












Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

patch(1)                                                           patch(1)

     Wenn der Vorspann eine Zeile "Prereq: " enthält, verwendet patch das
     erste Wort dieser Zeile (normalerweise handelt es sich hierbei um eine
     Versionsnummer) und prüft, ob dieses Wort in der Eingabedatei vor-
     kommt. Wenn dies nicht der Fall ist, fordert patch vor seiner weiteren
     Ausführung eine Bestätigung an.

     Wenn die Korrekturdatei mehr als ein Korrektur-Script enthält, ver-
     sucht patch, alle Korrektur-Scripts so anzuwenden, als stammten sie
     aus verschiedenen Korrekturdateien. D. h. patch versucht für jedes
     Korrektur-Script den Namen der zu korrigierenden Datei festzustellen
     und untersucht den Vor- und Nachspann vor jedem Korrektur-Script auf
     relevante Angaben (wie z. B. Dateinamen und Änderungsstand). Sie kön-
     nen Optionen (z. B. einen anderen Originaldateinamen) für das zweite
     und weitere Korrektur-Scripts angeben, indem Sie die entsprechenden
     Argumentlisten durch ein "+" trennen.

OPTIONEN
     Die Optionen -c, -e und -n können nicht zusammen verwendet werden.

     -b   Alle Originaldateien werden mit Suffix .orig gesichert, bevor die
          Korrekturanweisungen angewendet werden. Existiert die Sicherungs-
          datei bereits, wird sie überschrieben; bei mehreren Korrekturläu-
          fen wird nur beim ersten eine Sicherungsdatei angelegt. Wenn Sie
          zusätzlich die Option -o angeben, wird nicht die Originaldatei
          gesichert, sondern die Ausgabedatei, falls sie bereits existiert.

     -B sicherung
          Die Originaldatei wird unter sicherung.orig gesichert, bevor die
          Korrekturanweisungen angewendet werden.

     -c   Interpretiert die Korrekturdatei als Diff-Liste mit Kontextangabe
          (Ausgabe von diff, wenn -c oder -C angegeben wurde).

     -d verzeichnis
          patch wechselt vor weiteren Aktionen in das Verzeichnis
          verzeichnis.

     -D define
          Markiert Änderungen bei dem C-Präprozessor-Konstrukt:

          #ifdef define
          ...
          #endif

          Das Argument define wird als Unterscheidungssymbol verwendet.

          Beachten Sie, daß sich, anders als beim C-Compiler, zwischen der
          Option -D und dem Argument ein Leerzeichen befinden muß.

     -e   Interpretiert die Korrekturdatei als ein ed-Script.




Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

patch(1)                                                           patch(1)

     -f   patch stellt keine Rückfragen an den Benutzer. Diese Option
          unterdrückt jedoch keine Kommentare. Verwenden Sie dazu die
          Option -s.

     -F zeilen
          Stellt den maximalen Ungenauigkeitsfaktor ein. Diese Option gilt
          nur für Diff-Listen mit Kontextangabe. Wenn diese Option angege-
          ben ist, ignoriert patch bei der Suche nach einem passenden Kon-
          text maximal diese Anzahl von Zeilen in der Kontextangabe. Beach-
          ten Sie, daß ein größerer Ungenauigkeitsfaktor die Wahrschein-
          lichkeit einer fehlerhaften Korrektur erhöht. Der standardmäßige
          Ungenauigkeitsfaktor ist 2. Er kann maximal auf die Anzahl der
          Kontextzeilen einer Diff-Liste mit Kontextangabe gesetzt werden
          (in der Regel 3).

     -i korrekturdatei
          patch liest die Korrekturanweisungen aus der Datei korrekturda-
          tei. Wenn Sie für korrekturdatei einen Bindestrich angeben, liest
          patch von der Standardeingabe.

          Eine Korrekturdatei enthält ein oder mehrere Korrektur-Scripts,
          eventuell zusammen mit Zusatzinformationen. Enthält eine Korrek-
          turdatei mehrere Korrektur-Script, sollte jedes Script Informa-
          tionen über Dateinamen enthalten (wie bei diff -c entstanden),
          damit patch die betroffenen Dateien automatisch finden kann.

          patch wertet folgende Informationen aus:

          Index: pfadname
               pfadname benennt die zu korrigierende Datei

          *** pfadname
               pfadname gibt die "alte" Datei an, auf deren Grundlage das
               Korrektur-Script entstanden ist

          --- pfadname
               pfadname gibt die zu korrigierende Datei an (die Angabe hat
               Vorrang vor Index:)

          Jedes Korrektur-Script enthält Korrekturanweisungen, die einer
          der drei Arten von Diff-Listen entsprechen.

          -i nicht angegeben: patch liest von der Standardeingabe.

     -l   Eine beliebige Folge von Tabulator- und Leerzeichen in der Kor-
          rekturdatei paßt zu einer beliebigen Folge von Tabulator- und
          Leerzeichen in der Eingabedatei. Bei normalen Zeichen muß jedoch
          weiterhin eine exakte Übereinstimmung vorliegen.

     -n   Interpretiert die Korrekturdatei als eine normale Diff-Liste.




Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

patch(1)                                                           patch(1)

     -N   Ignoriert Korrekturanweisungen, die bereits angewandt wurden.
          Standardmäßig werden solche Korrekturanweisungen zurückgewiesen.

     -o ausgabedatei
          Die korrigierte Version wird in ausgabedatei geschrieben. Mehrere
          korrigierte Dateien werden dabei aneinandergehängt. Betreffen
          verschiedene Korrektur-Scripts dieselbe Originaldatei, werden die
          folgenden Scripts jeweils auf eine Zwischendatei angewendet. Ent-
          sprechend werden mehrere Versionen der Originaldatei nach ausga-
          bedatei geschrieben.

     -p zahl
          Steuert die Behandlung von in der Korrekturdatei gefundenen Pfad-
          namen. zahl gibt an, wieviele Schrägstriche vom Anfang des Pfad-
          namens entfernt werden sollen. (Alle dazwischenliegenden Ver-
          zeichnisnamen werden ebenfalls entfernt.) Bei relativen Pfadnamen
          erfolgt die Suche im aktuellen Verzeichnis oder in dem mit der
          Option -d angegebenen Verzeichnis.

          -p nicht angegeben: Es wird nur der Basisname ohne Pfad verwendet.

          Beispiel: Angenommen, der Dateiname in der Korrekturdatei wäre

               /u/howard/src/blurfl/blurfl.c

          Setzen der Option -p 0 läßt den gesamten Pfadnamen unverändert.
          Das Setzen der Option -p 1 entfernt den führenden Schrägstrich im
          Pfadnamen:

               u/howard/src/blurfl/blurfl.c

          Die Angabe der Option -p 4 ergibt den folgenden Pfadnamen:

               blurfl/blurfl.c

          Wird die Option -p nicht angegeben, wird der Pfadname auf
          blurfl.c gekürzt.

     -r fehlerdatei
          Gibt die Datei an, in der die zurückgewiesenen Korrekturanweisun-
          gen gesammelt werden sollen.

          -r nicht angegeben:

          Die zurückgewiesenen Korrekturen werden in einer Datei gesammelt,
          die denselben Namen hat wie die Ausgabedatei, jedoch mit dem Suf-
          fix .rej versehen ist.







Seite 5                      Reliant UNIX 5.44               Gedruckt 11/98

patch(1)                                                           patch(1)

     -R   patch soll den Sinn der Korrekturanweisungen umkehren, bevor sie
          auf die Originaldatei angewandt werden. Dies ist nötig, wenn die
          alten und neuen Dateien beim Erstellen der Korrektur vertauscht
          wurden. patch versucht, jeden Korrekturblock umzukehren, bevor er
          angewandt wird. Zurückgewiesene Korrekturanweisungen werden im
          umgekehrten Format in die Fehlerdatei geschrieben. Die Option -R
          kann nicht bei ed-Scripts verwendet werden, da die Informationen
          zur Rekonstruktion der umgekehrten Korrekturanweisungen nicht
          ausreichen.

          Kann der erste Korrekturblock einer Korrekturdatei nicht angewen-
          det werden, kehrt patch den Sinn der Korrekturanweisungen um und
          versucht, ihn auf diese Weise anzuwenden. Ist dies möglich, wer-
          den Sie gefragt, ob die Option -R gesetzt werden soll. Ist dies
          nicht möglich, trägt patch den Block in die Fehlerdatei ein und
          fährt normal fort. (Hinweis: Umgekehrte Korrekturanweisungen kön-
          nen mit dieser Methode nicht erkannt werden, wenn es sich um eine
          normale Diff-Liste handelt und das erste Kommando eine Einfügung
          ist, also eigentlich ein Löschvorgang sein sollte.)

     -s   patch gibt keine Meldungen aus, sofern kein Fehler auftritt.

     -S   Enthält eine Korrekturdatei mehrere Korrektur-Scripts, kann mit
          -S ein Script übersprungen werden. Auf die Originaldatei wird
          dann das nächste Script angewendet.

               patch -S + -S + datei

          ignoriert z. B. die ersten beiden von insgesamt drei Korrektur-
          Scripts.

     -v   Gibt Informationen über die Version des aktiven Programms patch
          aus.

     -x flag
          Setzt interne Flags für die Testhilfe. Diese Option kann zum Test
          der Korrekturdatei verwendet werden.

     datei
          Pfadname der zu korrigierenden Datei.

          datei nicht angegeben:

          patch versucht, den Dateinamen aus dem Vorspann zu den Korrektur-
          anweisungen zu ermitteln.

HINWEISE ZUR ARBEIT MIT PATCH
     Wenn Sie regelmäßig Korrekturdateien erstellen, empfiehlt es sich, als
     erste Korrekturanweisung die Änderungsstufe mitzuführen. Wenn Sie eine
     Zeile "Prereq: " in die Korrekturdatei stellen, können Sie verhindern,
     daß Benutzer falsche Korrekturen anwenden, ohne gewarnt zu werden.



Seite 6                      Reliant UNIX 5.44               Gedruckt 11/98

patch(1)                                                           patch(1)

     Prüfen Sie, ob Sie im Kopf einer Diff-Liste mit Kontextangabe oder in
     der Zeile "Index:" die Dateinamen korrekt angegeben haben. Wenn Sie
     Korrekturen in einem Unterverzeichnis durchführen wollen, teilen Sie
     dem Korrekturbenutzer mit, daß die Option -p entsprechend angegeben
     werden muß.

     Vermeiden Sie möglichst umgestellte Korrekturen.

     Stellen Sie zusammengehörende Korrekturen für den Fall eines Fehlers
     möglichst in separate Dateien.

     Werden Fehlerdateien mit zurückgewiesenen Korrekturblöcken erstellt,
     beendet sich patch mit einem Status ungleich null. Wenn Sie eine Reihe
     von Korrekturen in einer Schleife anwenden, sollten Sie diesen Ende-
     status prüfen, damit eine spätere Korrektur nicht auf einer nur teil-
     weise korrigierten Datei durchgeführt wird.

     Wenn Code dupliziert wurde (zum Beispiel mit "#ifdef OLDCODE ... #else
     ... #endif"), kann patch nicht beide Versionen korrigieren. Wenn das
     Kommando überhaupt ausgeführt werden kann, korrigiert es möglicher-
     weise die falsche Version, und informiert Sie darüber, daß die Korrek-
     turen erfolgreich abgearbeitet wurden.

     Wenn Sie eine bereits angewandte Korrektur nochmals anwenden, nimmt
     patch an, daß es sich um eine umgekehrte Korrektur handelt und bietet
     die Zurücknahme der Korrektur an.

UMGEBUNGSVARIABLEN
     Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kom-
     mandos patch:

     LANG         Gibt einen Standardwert für die Internationalisierungsva-
                  riablen an, die nicht gesetzt oder null sind. Ist LANG
                  nicht gesetzt oder null, wird der entsprechende Standard-
                  wert der internationalen Umgebung verwendet. Enthält eine
                  der Internationalisierungsvariablen eine ungültige Ein-
                  stellung, verhält sich das Kommando so, als wäre keine
                  der Variablen definiert.

     LCALL       Ist diese Variable auf einen Wert gesetzt, d. h. ist sie
                  nicht leer, überschreibt dieser Wert die Werte aller
                  übrigen Internationalisierungsvariablen.

     LCCTYPE     Legt die die Interpretation von Byte-Folgen als Zeichen
                  fest (z. B. Einzelbytezeichen im Unterschied zu Mehrbyte-
                  zeichen in Argumenten).

     LCMESSAGES  Legt das Format und den Inhalt von Meldungen fest.

     NLSPATH      Legt die Position der Meldungskataloge für die Verarbei-
                  tung von LCMESSAGES fest.



Seite 7                      Reliant UNIX 5.44               Gedruckt 11/98

patch(1)                                                           patch(1)

ENDESTATUS
     0   Erfolgreiche Beendigung.

     1   Eine oder mehrere zurückgewiesene Korrekturanweisungen wurden in
         die Fehlerdatei geschrieben.

     >1  Ein Fehler ist aufgetreten.

DATEIEN
     /tmp/patch*

SIEHE AUCH
     diff(1), ed(1).









































Seite 8                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026