Your Browser is not longer supported

Please use Google Chrome, Mozilla Firefox or Microsoft Edge to view the page correctly
Loading...

{{viewport.spaceProperty.prod}}

patch - Diff-Liste anwenden

&pagelevel(4)&pagelevel

(apply changes to files)


patch verwendet eine Korrekturdatei (patch file) mit einer der drei Arten von Deltalisten (normal, mit Kontextangabe oder im ed-Format), die vom Kommando diff 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 weitergeleitet 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.


Syntax


patch[ -blNR][ -c| -e| -n][ -d dir][ -D define][ -i patchfile][ -o outfile]
     [ -p num][ -r rejectfile][file]

Optionen

-b

Alle Originaldateien werden mit Suffix .orig gesichert, bevor die Korrekturanweisungen angewendet werden. Existiert die Sicherungsdatei bereits, wird sie überschrieben; bei
mehreren Korrekturläufen 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.

-c

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

-d dir

patch wechselt vor weiteren Aktionen in das Verzeichnis dir.

-D define

Markiert Änderungen mit den Anweisungen

#ifdef define
...
#endif

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

-e

Interpretiert die Korrekturdatei als ein ed-Skript.

-i patchfile

patch liest die Korrekturanweisungen aus der Datei patchfile. Wenn Sie für patchfile einen Bindestrich angeben, liest patch von der Standard-Eingabe.

Eine Korrekturdatei enthält ein oder mehrere Korrektur-Skripts, eventuell zusammen mit Zusatzinformationen. Enthält eine Korrekturdatei mehrere Korrektur-Skript, sollte jedes Skript Informationen ü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-Skript entstanden ist

--- pfadname

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

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

-i nicht angegeben:
patch liest von der Standard-Eingabe.

-l

Eine beliebige Folge von Tabulator- und Leerzeichen in der Korrekturdatei passt zu einer beliebigen Folge von Tabulator- und Leerzeichen in der Eingabedatei. Bei normalen Zeichen muss jedoch weiterhin eine exakte Übereinstimmung vorliegen.

-n

Interpretiert die Korrekturdatei als eine normale Diff-Liste.

-N

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

-o outfile

Die korrigierte Version wird in outfile geschrieben. Mehrere korrigierte Dateien werden dabei aneinandergehängt. Betreffen verschiedene Korrektur-Skripts dieselbe Originaldatei, werden die folgenden Skripts jeweils auf eine Zwischendatei angewendet. Entsprechend werden mehrere Versionen der Originaldatei nach outfile geschrieben.

-p num

Steuert die Behandlung von in der Korrekturdatei gefundenen Pfadnamen. num gibt an, wieviele Schrägstriche vom Anfang des Pfadnamens entfernt werden sollen. (Alle dazwischenliegenden Verzeichnisnamen 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ässt 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 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-Skripts verwendet werden, da die Informationen zur Rekonstruktion der umgekehrten Korrekuranweisungen nicht ausreichen.

Kann der erste Korrekturblocks einer Korrekturdatei nicht angewendet werden, kehrt patch den Sinn der Korrekturanweisungen um und versucht, ihn auf diese Weise anzuwenden. Ist dies möglich, werden 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önnen 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.)

-r rejectfile

Gibt die Datei an, in der die zurückgewiesenen Korrekturanweisungen 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 Suffix .rej versehen ist.

file

Pfadname der zu korrigierenden Datei.

file nicht angegeben:
patch versucht, den Dateinamen aus dem Vorspann zu den Korrekturanweisungen zu ermitteln.

Hinweis 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, dass Benutzer falsche Korrekturen anwenden, ohne gewarnt zu werden.

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, dass die Option -p entsprechend angegeben werden muss.

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 Endestatus prüfen, damit eine spätere Korrektur nicht auf einer nur teilweise 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öglicherweise die falsche Version, und informiert Sie darüber, dass die Korrekturen erfolgreich abgearbeitet wurden.

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

Internationale Umgebung

Die folgenden Umgebungsvariablen beeinflussen die Ausführung des Kommandos patch:

LANG

Gibt einen Standardwert für die Variablen für die internationale Umgebung an, die nicht gesetzt oder Null sind. Ist LANG nicht gesetzt oder Null, wird der entsprechende Standardwert der internationalen Umgebung verwendet. Enthält eine der Internationalisierungsvariablen eine ungültige Einstellung, verhält sich das Kommando so, als sei keine der Variablen definiert worden.

LC_ALL

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

LC_CTYPE

Legt die internationale Umgebung für die Interpretation der Byte-Folgen eines Datentexts als Zeichen fest (z.B. Singlebytezeichen im Unterschied zu Mehrbytezeichen in Argumenten und Eingabedateien) sowie die Einteilung der Zeichen in Groß- und Kleinbuchstaben und deren Übereinstimmung.

LC_MESSAGES

Legt die internationale Umgebung für Format und Inhalt der Diagnosemeldungen fest, die in die Standardfehlerausgabe geschrieben werden.

LC_TIME

Legt das Format der Dateizeitstempels fest, der von diff in einem kontextabhängigen Eingabedatei geschrieben wird.

NLSPATH

Legt den Pfad der Meldungsdateien für LC_MESSAGES fest.

Endestatus

0Erfolgreiche Beendigung.
1Eine oder mehrere zurückgewiesene Korrekturanweisungen wurden in die Fehlerdatei geschrieben.
>1Ein Fehler ist aufgetreten.

Datei

/tmp/patch*

Siehe auch

diff, ed