patch(1p): Skillnad mellan sidversioner

Från Wiki.linux.se -Linux wikipedia på Svenska.
Hoppa till navigering Hoppa till sök
(Skapade sidan med '= patch(1p) – Linux manualsida = == Prolog == Den här manualsidan är en del av '''POSIX Programmer's Manual'''. Linux-implementationen av detta gränssnitt kan skilja sig åt. Se motsvarande Linux-manualsida för detaljer om Linux-beteende. Gränssnittet kanske inte heller är implementerat på Linux. == Namn == '''patch''' – tillämpa ändringar på filer. == Synopsis == <pre> patch [-blNR] [-c|-e|-n|-u] [-d katalog] [-D define] [-i patchfil] [-o utda...')
 
 
(2 mellanliggande sidversioner av samma användare visas inte)
Rad 428: Rad 428:
== Se även ==
== Se även ==


* '''diff(1p)'''
* '''[[diff(1p)]]'''
* '''ed(1p)'''
* '''[[ed(1p)]]'''
* POSIX.1-2017, Base Definitions, kapitel 8, ''Environment Variables''
* POSIX.1-2017, Base Definitions, kapitel 8, ''Environment Variables''
* POSIX.1-2017, Base Definitions, avsnitt 12.2, ''Utility Syntax Guidelines''
* POSIX.1-2017, Base Definitions, avsnitt 12.2, ''Utility Syntax Guidelines''
Rad 454: Rad 454:
* https://www.kernel.org/doc/man-pages/reporting_bugs.html
* https://www.kernel.org/doc/man-pages/reporting_bugs.html


== Sidfot ==


<pre>
= Sidslut =
IEEE/The Open Group                2017                        PATCH(1P)
 
</pre>
Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/patch.1p.html
Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på
https://www.linux.se/kontaka-linux-se/
<BR><BR>Tack till [https://datorhjalp.se/web Datorhjälp] som har  sponsrat [https://www.linux.se Linux.se] med webbhotell.
 
[[Kategori:Linuxmanual grupp 1]]
[[Kategori:Linuxmanual]]

Nuvarande version från 7 maj 2026 kl. 05.54

patch(1p) – Linux manualsida

Prolog

Den här manualsidan är en del av POSIX Programmer's Manual.

Linux-implementationen av detta gränssnitt kan skilja sig åt. Se motsvarande Linux-manualsida för detaljer om Linux-beteende. Gränssnittet kanske inte heller är implementerat på Linux.

Namn

patch – tillämpa ändringar på filer.

Synopsis

patch [-blNR] [-c|-e|-n|-u] [-d katalog] [-D define] [-i patchfil]
      [-o utdatafil] [-p antal] [-r avvisningsfil] [fil]

Beskrivning

Verktyget patch ska läsa en källfil, det vill säga en patchfil, som innehåller någon av fyra former av differenslistor skapade av verktyget diff:

  • normal differens
  • kopierad kontextdifferens
  • enhetlig kontextdifferens
  • differens i ed-stil

Dessa skillnader tillämpas sedan på en fil. Som standard ska patch läsa från standardinmatning.

Verktyget patch ska försöka avgöra typen av diff-lista, om detta inte åsidosätts med någon av flaggorna -c, -e, -n eller -u.

Om patchfilen innehåller mer än en patch ska patch försöka tillämpa var och en av dem som om de kom från separata patchfiler. I detta fall ska programmet säkerställa att namnet på patchfilen kan bestämmas för varje diff-lista.

Flaggor

Verktyget patch ska följa POSIX.1-2017, Base Definitions, avsnitt 12.2, Utility Syntax Guidelines.

Följande flaggor ska stödjas:

-b
Spara en kopia av det ursprungliga innehållet i varje ändrad fil, innan skillnaderna tillämpas, i en fil med samma namn och suffixet .orig tillagt.
Om filen redan finns ska den skrivas över.
Om flera patchar tillämpas på samma fil ska .orig-filen endast skrivas för den första patchen.
När flaggan -o utdatafil också anges ska fil'.orig inte skapas. Om utdatafil redan finns ska dock utdatafil'.orig skapas.
-c
Tolka patchfilen som en kopierad kontextdifferens, det vill säga utdata från verktyget diff när flaggorna -c eller -C anges.
-d katalog
Byt aktuell katalog till katalog före bearbetning, enligt beskrivningen i avsnittet Utökad beskrivning.
-D define
Märk ändringar med en av följande C-preprocessor-konstruktioner:
#ifdef define
...
#endif

#ifndef define
...
#endif
Dessa kan valfritt kombineras med C-preprocessor-konstruktionen:
#else
Om den patchade filen bearbetas med C-preprocessorn och makrot define är definierat, ska utdata innehålla ändringarna från patchfilen. Annars ska utdata inte innehålla patcharna som anges i patchfilen.
-e
Tolka patchfilen som ett ed-skript i stället för ett diff-skript.
-i patchfil
Läs patchinformationen från filen som anges av sökvägen patchfil, i stället för från standardinmatning.
-l
Bokstaven ell.
Gör att varje följd av blanktecken i differensskriptet matchar varje följd av blanktecken i indatafilen.
Övriga tecken ska matchas exakt.
-n
Tolka skriptet som en normal differens.
-N
Ignorera patchar där skillnaderna redan har tillämpats på filen.
Som standard ska redan tillämpade patchar avvisas.
-o utdatafil
I stället för att ändra filerna direkt, det vill säga filerna som anges av fil-operanden eller differenslistorna, ska en kopia av filen som refereras av varje patch skrivas till utdatafil, med lämpliga skillnader tillämpade.
Flera patchar för en enda fil ska tillämpas på mellanversionerna av filen som skapats av tidigare patchar och ska resultera i flera sammanfogade versioner av filen skrivna till utdatafil.
-p antal
För alla sökvägar i patchfilen som anger namnen på filer som ska patchas, ta bort antal sökvägskomponenter från början av varje sökväg.
Om sökvägen i patchfilen är absolut ska inledande snedstreck betraktas som den första komponenten. Det innebär att:
-p 1
tar bort de inledande snedstrecken.
Att ange:
-p 0
gör att hela sökvägen används.
Om -p inte anges används endast basnamnet, det vill säga den sista sökvägskomponenten.
-R
Vänd patchskriptets riktning.
Det innebär att differensskriptet antas ha skapats från den nya versionen till den gamla versionen.
Flaggan -R kan inte användas med ed-skript.
Verktyget patch ska försöka vända varje del av skriptet innan det tillämpas.
Avvisade skillnader ska sparas i omvänt format.
Om denna flagga inte anges, och tills en del av patchfilen har tillämpats korrekt, försöker patch tillämpa varje del både i omvänd och normal riktning. Om försöket lyckas ska användaren få en fråga för att avgöra om flaggan -R ska sättas.
-r avvisningsfil
Åsidosätt standardnamnet för avvisningsfilen.
Som standard ska avvisningsfilen ha samma namn som utdatafilen med suffixet .rej tillagt. Se Patchtillämpning.
-u
Tolka patchfilen som en enhetlig kontextdifferens, det vill säga utdata från verktyget diff när flaggorna -u eller -U anges.

Operander

Följande operand ska stödjas:

fil
En sökväg till en fil som ska patchas.

Standardinmatning

Se avsnittet Indatafiler.

Indatafiler

Indatafiler ska vara textfiler.

Miljövariabler

Följande miljövariabler ska påverka körningen av patch:

LANG
Anger ett standardvärde för internationaliseringsvariabler som är osatta eller tomma.
Se POSIX.1-2017, Base Definitions, avsnitt 8.2, Internationalization Variables, för företrädesordningen för internationaliseringsvariabler som används för att bestämma värden för lokalkategorier.
LC_ALL
Om den är satt till en icke-tom sträng åsidosätter den värdena för alla andra internationaliseringsvariabler.
LC_COLLATE
Bestämmer lokalen för beteendet hos intervall, ekvivalensklasser och flerteckens sorteringselement som används i det utökade reguljära uttryck som definieras för lokalnyckelordet yesexpr i kategorin LC_MESSAGES.
LC_CTYPE
Bestämmer lokalen för tolkning av byteföljder i textdata som tecken, till exempel enkelbyte- jämfört med multibytetecken i argument och indatafiler.
Den bestämmer också beteendet hos teckenklasser som används i det utökade reguljära uttryck som definieras för lokalnyckelordet yesexpr i kategorin LC_MESSAGES.
LC_MESSAGES
Bestämmer lokalen som används för att behandla jakande svar, samt lokalen som påverkar formatet och innehållet i diagnostiska meddelanden och frågor som skrivs till standardfel.
NLSPATH
Bestämmer platsen för meddelandekataloger vid bearbetning av LC_MESSAGES.
LC_TIME
Bestämmer lokalen för igenkänning av formatet på filtidsstämplar som skrivs av verktyget diff i en indatafil med kontextdifferens.

Asynkrona händelser

Standardbeteende.

Standardutmatning

Används inte.

Standardfel

Standardfel ska användas för diagnostiska och informativa meddelanden.

Utdatafiler

Utdata från verktyget patch, sparfilerna med suffixet .orig och avvisningsfilerna med suffixet .rej ska vara textfiler.

Utökad beskrivning

En patchfil kan innehålla patchningsinstruktioner för mer än en fil. Filnamn ska bestämmas enligt Filnamnsbestämning.

När flaggan -b anges ska originalet för varje patchad fil sparas i en fil med samma namn och suffixet .orig tillagt.

För varje patchad fil kan även en avvisningsfil skapas enligt Patchtillämpning. Om flaggan -r saknas ska namnet på denna fil skapas genom att suffixet .rej läggs till det ursprungliga filnamnet.

Patchfilformat

Patchfilen ska innehålla noll eller flera rader med rubrikinformation följt av en eller flera patchar.

Varje patch ska innehålla noll eller flera rader med filnamnsidentifiering i det format som skapas av flaggorna -c, -C, -u eller -U hos verktyget diff, samt en eller flera uppsättningar av diff-utdata. Dessa uppsättningar kallas vanligen hunks.

Verktyget patch ska känna igen följande uttryck i rubrikinformationen:

Index: sökväg
Filen som ska patchas heter sökväg.

Om alla rader, inklusive rubriker, inom en patch börjar med samma inledande följd av blanktecken, ska patch ta bort denna följd innan bearbetningen fortsätter.

Inom varje patch, om differenstypen är vanlig kontext, ska patch känna igen följande uttryck:

*** filnamn tidsstämpel
Patcharna härstammar från filnamn.
--- filnamn tidsstämpel
Patcharna ska tillämpas på filnamn.

Om differenstypen är enhetlig kontext, ska patch känna igen följande uttryck:

--- filnamn tidsstämpel
Patcharna härstammar från filnamn.
+++ filnamn tidsstämpel
Patcharna ska tillämpas på filnamn.

Varje hunk inom en patch ska vara diff-utdata för att ändra ett radintervall inom originalfilen.

Radnumren för efterföljande hunks inom en patch ska förekomma i stigande ordning.

Filnamnsbestämning

Om ingen fil-operand anges ska patch utföra följande steg för att bestämma vilket filnamn som ska användas:

  1. Om typen av diff är kontext ska patch ta bort sökvägskomponenter, enligt flaggan -p, från filnamnet på raden som börjar med "***" vid kopierad kontext, eller "---" vid enhetlig kontext. Därefter ska verktyget testa om denna fil finns relativt till aktuell katalog, eller katalogen som anges med flaggan -d. Om filen finns ska patch använda detta filnamn.
  2. Om typen av diff är kontext ska patch ta bort sökvägskomponenter, enligt flaggan -p, från filnamnet på raden som börjar med "---" vid kopierad kontext, eller "+++" vid enhetlig kontext. Därefter ska verktyget testa om denna fil finns relativt till aktuell katalog, eller katalogen som anges med flaggan -d. Om filen finns ska patch använda detta filnamn.
  3. Om rubrikinformationen innehåller en rad som börjar med strängen Index:, ska patch ta bort sökvägskomponenter, enligt flaggan -p, från denna rad. Därefter ska verktyget testa om denna fil finns relativt till aktuell katalog, eller katalogen som anges med flaggan -d. Om filen finns ska patch använda detta filnamn.
  4. Om en SCCS-katalog finns i aktuell katalog ska patch försöka köra kommandot:
get -e SCCS/s.filnamn
för att hämta en redigerbar version av filen. Om filen finns ska patch använda detta filnamn.
  1. Verktyget patch ska skriva en fråga till standardutmatning och interaktivt begära ett filnamn från den styrande terminalen, till exempel:
/dev/tty

Patchtillämpning

Om någon av flaggorna -c, -e, -n eller -u finns ska patch tolka informationen i varje hunk som en kopierad kontextdifferens, en ed-differens, en normal differens respektive en enhetlig kontextdifferens.

Om ingen av dessa flaggor anges ska patch bestämma differenstypen baserat på formatet hos informationen i hunken.

För varje hunk ska patch börja söka efter platsen där patchen ska tillämpas vid radnumret i början av hunken, plus eller minus eventuell förskjutning som användes vid tillämpning av föregående hunk.

Om rader som matchar hunkens kontext inte hittas ska patch söka både framåt och bakåt minst 1000 byte efter en uppsättning rader som matchar hunkens kontext.

Om ingen sådan plats hittas och det är en kontextdifferens, ska en ny sökning göras där den första och sista kontextraden ignoreras. Om även detta misslyckas, ska de första två och sista två kontextraderna ignoreras och ännu en sökning göras.

Implementationer kan söka mer omfattande efter platser där patchen kan installeras.

Om ingen plats kan hittas ska patch lägga till hunken i avvisningsfilen.

En avvisad hunk som är en kopierad kontextdifferens, en ed-differens eller en normal differens ska skrivas i formatet kopierad kontextdifferens, oavsett patchfilens format.

Det är implementationsdefinierat om en avvisad hunk som är en enhetlig kontextdifferens skrivs i formatet kopierad kontextdifferens eller enhetlig kontextdifferens.

Om indata var en normal differens eller en differens i ed-stil kan avvisningsfilen innehålla skillnader med noll rader kontext.

Radnumren i hunks i avvisningsfilen kan skilja sig från radnumren i patchfilen, eftersom de ska avspegla ungefärliga platser för de misslyckade hunksen i den nya filen snarare än i den gamla.

Om patchtypen är en ed-diff kan implementationen utföra patchningen genom att anropa verktyget ed.

Avslutningsstatus

Följande avslutningsvärden ska returneras:

0
Lyckad körning.
1
En eller flera rader skrevs till en avvisningsfil.
>1
Ett fel inträffade.

Följder av fel

Patchar som inte kan placeras korrekt i filen ska skrivas till en avvisningsfil.

Följande avsnitt är informativa.

Programanvändning

Flaggan -R fungerar inte med ed-skript eftersom det finns för lite information för att rekonstruera den omvända operationen.

Flaggan -p gör det möjligt att anpassa en patchfil till lokala katalogstrukturer utan att redigera patchfilen manuellt.

Om filnamnet i patchfilen till exempel var:

/curds/whey/src/blurfl/blurfl.c

ger:

-p 0

hela sökvägen oförändrad.

-p 1

ger:

curds/whey/src/blurfl/blurfl.c

utan det inledande snedstrecket.

-p 4

ger:

blurfl/blurfl.c

och om -p inte anges alls blir resultatet:

blurfl.c

Exempel

Inga.

Bakgrund

Viss funktionalitet i historiska implementationer av patch specificerades inte.

Följande dokumenterar sådana funktioner i historiska implementationer som inte har specificerats.

En borttagen funktion var pseudo-flaggan +, som tillät att ytterligare en uppsättning flaggor och en patchfiloperand angavs. Den ansågs inte vara tillräckligt användbar för att standardiseras.

I historiska implementationer sökte patch efter motsvarande versionsinformation om strängen "Prereq:" förekom i rubriken. Versionsinformationen var strängen som angavs i rubriken, avgränsad av blanktecken eller början eller slut på en rad eller fil, och kunde förekomma var som helst i originalfilen.

Detta togs bort eftersom mekanismen ansågs för enkel och otillräckligt tillförlitlig för standardisering.

Om till exempel följande fanns i rubriken:

Prereq: 1.2

skulle förekomsten av en avgränsad 1.2 var som helst i filen uppfylla förutsättningen.

Följande flaggor togs bort från historiska implementationer av patch eftersom de inte ansågs tillräckligt användbara för att standardiseras:

-b
Flaggan -b gav historiskt ett sätt att ändra filändelsen för säkerhetskopian från standardvärdet .orig.
Denna flagga har modifierats och behållits i POSIX.1-2017.
-F
Flaggan -F angav antalet kontextrader i en kontextdiff som skulle ignoreras vid sökning efter en plats att installera en patch.
-f
Flaggan -f gjorde historiskt att patch inte begärde ytterligare information från användaren.
-r
Flaggan -r gav historiskt ett sätt att åsidosätta filändelsen för avvisningsfilen från standardvärdet .rej.
-s
Flaggan -s gjorde historiskt att patch arbetade tyst om inget fel inträffade.
-x
Flaggan -x satte historiskt interna felsökningsflaggor.

I vissa filsystemimplementationer kan sparandet av en .orig-fil ge oönskade resultat.

För filnamn med 12, 13 eller 14 tecken, på filsystem som stöder högst 14 tecken långa filnamn, kan .orig-filen skriva över den nya filen. Avvisningsfilen kan också överskrida denna filnamnsgräns.

Det föreslogs, på grund av viss historisk praxis, att ett tilde-suffix, ~, skulle användas i stället för .orig och något annat tecken i stället för suffixet .rej.

Detta avvisades eftersom det inte är uppenbart för användaren vilken fil som är vilken. Suffixen .orig och .rej är tydligare och mer begripliga.

Flaggan -b har motsatt innebörd i vissa historiska implementationer: spara inte .orig-filen.

Standardfallet här är att inte spara filerna, vilket gör att patch beter sig mer konsekvent med andra standardverktyg.

Flaggan -w i tidiga förslag ändrades till -l för att matcha historisk praxis.

Flaggan -N inkluderades eftersom ett icke-interaktivt program utan den inte kan avvisa tidigare tillämpade patchar.

Om en användare till exempel leder utdata från diff till verktyget patch och endast vill patcha en fil till en nyare version utan interaktion, krävs flaggan -N.

Ändringar i beskrivningen av flaggan -l föreslogs för att tillåta matchning över radbrytningar utöver endast blanktecken. Eftersom detta inte är historisk praxis, och eftersom vissa oklarheter kan uppstå, föreslås att framtida utveckling på detta område använder en annan flaggbokstav, till exempel -L.

GNU patch-flaggan -u har lagts till, tillsammans med stöd för enhetliga kontextformat.

Framtida riktning

Ingen.

Se även

  • diff(1p)
  • ed(1p)
  • POSIX.1-2017, Base Definitions, kapitel 8, Environment Variables
  • POSIX.1-2017, Base Definitions, avsnitt 12.2, Utility Syntax Guidelines

Upphovsrätt

Delar av denna text är återgivna och reproducerade i elektronisk form från:

  • IEEE Std 1003.1-2017, Standard for Information Technology -- Portable Operating System Interface (POSIX)
  • The Open Group Base Specifications Issue 7, 2018 Edition

Copyright © 2018 Institute of Electrical and Electronics Engineers, Inc. och The Open Group.

Vid avvikelse mellan denna version och den ursprungliga IEEE- och The Open Group-standarden gäller den ursprungliga standarden som referensdokument.

Den ursprungliga standarden kan hämtas online från:

Eventuella typografiska fel eller formateringsfel på denna sida har troligen införts vid konverteringen av källfilerna till man-sideformat.

För att rapportera sådana fel, se:


Sidslut

Orginalhemsidan på Engelska https://man7.org/linux/man-pages/man1/patch.1p.html Det här är en maskinöversättning av Linux man sidor till svenska. Om du hittar fel är vi tacksamma om du rapporterar dem via formuläret som finns på https://www.linux.se/kontaka-linux-se/

Tack till Datorhjälp som har sponsrat Linux.se med webbhotell.