Sådan bruges "her Dokumenter" i Bash på Linux

Mar 31, 2025
Linux
FATMAWATI ACHMAD ZAENURI / SHUTTERSTOCK

De mærkeligt navngivne "her dokumenter" giver dig mulighed for at bruge input / out omdirigering inde i bash scripts på Linux. De er en fantastisk måde at automatisere kommandoer, du skal køre på en fjerncomputer.

Her dokumenter

Mange kommandoer i Linux har to eller tre bogstavnavne. Dette er dels, hvad der giver anledning til tanken om, at Linux er svært at lære og fuld af Arcane-kommandoer. Men en af ​​de mærkeligste navne i Linux er ikke en af ​​de kryptisk korte. "Her er dokumenter" ikke dokumenter, og det er ikke rigtig klart, hvad "her" refererer til, enten.

De er en relativt uklart konstruktion, men de er nyttige. Dette er selvfølgelig Linux, så der er mere end en måde at skinne på en kat på. Nogle af de funktionalitet, der leveres her, kan reproduceres på andre måder. Disse alternative metoder er normalt mere komplicerede. I programmering og scripting betyder "mere kompliceret" også "mere tilbøjelige til bugs", og at din kode er sværere at opretholde.

Hvor her er dokumenter, er det virkelig Excel i automatiseringen af ​​kommandoer, som du vil sende til en fjerncomputer fra en forbindelse etableret fra et script. Når forbindelsen er nemt, men når forbindelsen er foretaget, hvordan har du "din kommandoer fra dit script i skallen på fjerncomputeren? Her giver dig mulighed for at gøre det meget simpelt.

Grundlæggende principper herfra dokumenter

Den idiomatiske repræsentation af et her dokument ser sådan ud:

 Command & Lt; & lt; limit_string.
 .
 .
tekst
data
variabler.
.
.
limit_string 
  • KOMMANDO : Dette kan være en hvilken som helst Linux-kommando, der accepterer omdirigeret input. Bemærk, The ekko kommando accepterer ikke omdirigeret input . Hvis du har brug for at skrive til skærmen, kan du bruge kat kommando, som gør .
  • & lt; & lt; : Omdirigeringsoperatøren.
  • limit_string. : Dette er en etiket. Det kan være, hvad du vil, så længe det ikke vises på listen over data, du omdirigerer ind i kommandoen. Det bruges til at markere slutningen af ​​tekst-, data- og variablerlisten.
  • Data liste : En liste over data, der skal fodres til kommandoen. Det kan indeholde kommandoer, tekst og variabler. Indholdet af datalisten føres ind i kommandoen en linje ad gangen, indtil _limit_stringen opstår.

Du vil nok se eksempler på her dokumenter, der bruger "EOF" som grænsestrengen. Vi favoriserer ikke denne tilgang. Det virker, men "EOF" betyder "slutningen af ​​filen". Bortset fra det sjældne tilfælde, hvor et hjemmedokument er det sidste i en scriptfil, bruges "EOF" fejlagtigt.

Det vil gøre dine scripts meget mere læsbare, hvis du bruger en grænsestreng, der refererer til, hvad du laver. Hvis du sender en række kommandoer til en fjerncomputer over Secure Shell. (SSH), en grænsestreng kaldet noget som "_remote_commands" ville gøre perfekt mening. Du behøver ikke at starte dem med en understregning " _ " Karakter. Det gør vi fordi det markerer dem som noget ud over det sædvanlige i dit script.

Enkle eksempler.

Du kan bruge her dokumenter på kommandolinjen og i scripts. Når du skriver følgende i et terminalvindue, vil du se en " & gt; "Line Continuation Prompt hver gang du rammer" Enter. " Når du skriver grænsen "_end_of_text", og tryk "Enter", overføres listen over websteder til kat, og de vises i terminalvinduet.

 CAT & LT; & lt; _end_of_text.
How-to Geek
Gennemgå Geek
Lifesavvy.
Cloudsavvy IT.
Mindbounce.
_end_of_text 

Det er ikke det mest værd at udøve øvelser, men det viser, at intet sendes til kommandoen, indtil hele listen over data samles, og grænsestrengen opstår. Det kat Kommando modtager ikke nogen input, indtil du indtaster grænsestrengen "_end_of_text" og tryk på "Enter" -tasten.

Vi kan gøre det samme i et script. Skriv eller kopier dette eksempel i en editor, gem filen som "Heredoc-1.sh", og luk editoren.

 #! / Bin / bash

CAT & LT; & lt; "_end_of_text"
Dit brugernavn er: $ (Whoami)
Din nuværende arbejdskatalog er: $ PWD
Din bash version er: $ bash_version
_end_of_text 

Når du følger denne artikel, skal du hver gang du opretter et script, skal du Gør det eksekverbar før det løber. I hvert tilfælde, brug chmod. kommando . Udskift navnet på scriptet i hvert eksempel på scriptnavnet, der bruges her.

 CHMOD + X-Heredoc-1.sh 

Dette script indeholder to miljøvariabler, $ PWD. og $ Bash_version . Miljøvariable navne erstattes af deres dataværdier - den aktuelle arbejdskatalog og den version af bash-når scriptet udføres.

Scriptet bruger også kommandosubstitution det hvem er jeg kommando . Navnet på kommandoen erstattes af sin egen produktion. Udgangen fra hele scriptet er skrevet til terminalvinduet af CAT-kommandoen. Vi kører scriptet ved at kalde det ved navn:

 ./ Heredoc-1.sh 

Hvis du ændrer scriptet og pakker grænsestrengen i den første linje i her-dokumentet i citatmærker " " "Datasallisten overføres til her Dokumentkommandoen Verbatim. Variable navne vises i stedet for variable værdier, og kommandosubstitution vil ikke finde sted.

 #! / Bin / bash

kat & lt; & lt; - "_end_of_text"
Dit brugernavn er: $ (Whoami)
Din nuværende arbejdskatalog er: $ PWD
Din bash version er: $ bash_version
_end_of_text 

Håndtering Tab tegn.

Som standard bevares TAB-tegn i din dataliste og skrives til terminalvinduet. Kopier og gem dette eksempel som "Heredoc-2.Sh." Gør det eksekverbar ved hjælp af chmod. kommando. Rediger de indrykkede linjer for at sikre, at de har et eller to faneblad i starten af ​​linjen i stedet for en række mellemrum.

 #! / Bin / bash

CAT & LT; & lt; _end_of_text.
Dit brugernavn er: $ (Whoami)
  Din nuværende arbejdskatalog er: $ PWD
    Din bash version er: $ bash_version
_end_of_text 
 ./ HEREDOC-2.SH 

Tab'erne er skrevet til terminalvinduet.

Ved at tilføje en dash " Rede - "Til omdirigeringsoperatøren vil her-dokumentet ignorere førende faneblad. Gem dette eksempel som "Heredoc-3.sh" og gør det eksekverbart.

 #! / Bin / bash

cat & lt; & lt; - _end_of_text
Dit brugernavn er: $ (Whoami)
  Din nuværende arbejdskatalog er: $ PWD
    Din bash version er: $ bash_version
_end_of_text 
 ./ HEREDOC-3.SH 

Tab'erne ignoreres. Dette kan virke trivielt, men det er en pæn måde at klare førende faner på grund af indrykkede sektioner af scripts.

Loops og andre logiske konstruktioner er normalt indrykket. Hvis dit her dokument er indeholdt i et indrykket afsnit af et script, ved hjælp af et dash " Rede - "Med omdirigeringsoperatøren fjerner formateringsproblemer forårsaget af de førende TAB-tegn.

 #! / Bin / bash

Hvis det er sandt; derefter
  Cat & Lt; & lt; - _limit_string
  Linje 1 med en førende fane.
  Linje 2 med en førende fane.
  Linje 3 med en førende fane.
  _limit_string.
fi 

Omdirigere til en fil

Udgangen fra den kommando, der bruges med her-dokumentet, kan omdirigeres i en fil. Brug " & gt; "(Opret filen) eller" & gt; & gt; "(Opret filen, hvis den ikke eksisterer, tilføj til filen, hvis den gør) omdirigeringsoperatører efter grænsestrengen i den første linje i her dokumentet.

Dette script er "Heredoc-4.sh." Det vil omdirigere sit output til en tekstfil kaldet "session.txt."

 #! / Bin / bash

CAT & LT; & lt; _end_of_text & gt; session.txt.
Dit brugernavn er: $ (Whoami)
Din nuværende arbejdskatalog er: $ PWD
Din bash version er: $ bash_version
_end_of_text 
 ./ HEREDOC-4.SH 
 CAT SESSION.TEXT 

Rør udgangen til en anden kommando

Udgangen fra kommandoen, der bruges i et her-dokument, kan røres som input til en anden kommando. Brug røret " | "Operator. efter grænsestrengen i den første linje i her dokumentet. Vi skal rør udgangen fra kommandoen her. kat , ind i sed. . Vi vil gerne erstatte alle forekomster af bogstavet "A" med bogstavet "E".

Navngiv dette script "Heredoc-5.sh."

 #! / Bin / bash

CAT & LT; & lt; _end_of_text | sed 's / a / e / g'
Hvordan
Til
GAAK.
_end_of_text 
 ./ HEREDOC-5.SH 

"GAAK" korrigeres til "Geek".

Sende parametre til en funktion

Kommandoen, der bruges med et her dokument, kan være en funktion i scriptet.

Dette script passerer nogle køretøjsdata til en funktion. Funktionen læser dataene som om den var blevet indtastet af en bruger. Værdierne af variablerne udskrives derefter. Gem dette script som "Heredoc-6.sh".

 #! / Bin / bash

# SET_CAR_DETAILS () funktionen
set_car_details ()
{
læs make.
Læs model
læs new_used
Læs Delivery_Collect.
læs placering
Læs prisen
}

# Her dokumentet, der passerer dataene til SET_CAR_DETAILS ()
set_car_details & lt; & lt; _MARS_ROVER_DATA.
Nasa.
Udholdenhed rover.
Brugt
Indsamle
Mars (lang, lat) 77.451865,18.445161
2,2 mia
_MARS_ROVER_DATA.

# Hent køretøjets detaljer
ekko "Make: $ make"
ECHO "Model: $ model"
ekko "Ny eller brugt: $ new_used"
ECHO "Levering eller indsamling: $ Delivery_collect"
ekko "Placering: $ placering"
ekko "pris \ $: $ pris" 
 ./ HEREDOC-6.SH 

Køretøjsoplysningerne er skrevet til terminalvinduet.

Oprettelse og sender en e-mail

Vi kan bruge et her dokument til at komponere og sende en e-mail. Bemærk, at vi kan passere parametre til kommandoen foran omdirigeringsoperatøren. Vi er ved hjælp af Linux. post kommando til Send en email via det lokale postsystem til brugerkontoen kaldet "Dave". Det -S. (Emne) Mulighed giver os mulighed for at angive emnet for e-mailen.

Dette eksempel danner script "heredoc-7.sh."

 #! / Bin / bash

Artikel = "Her dokumenter"

Mail -s 'arbejdsbyrde status' Dave & Lt; & lt; _project_report.
Brugernavn: $ (Whoami)
Har afsluttet opgaven:
Artikel: $ artiklen
_project_report 
 ./ HEREDOC-7.SH 

Der er ingen synlig output fra dette script. Men når vi tjekker vores mail, ser vi, at e-mailen blev sammensat, afsendt og leveret.

 Mail 

Bruger her dokumenter med ssh

Her er dokumenter en stærk og bekvem måde at udføre nogle kommandoer på en fjerncomputer, når en SSH-forbindelse er etableret. Hvis du har oprettet SSH-nøgler mellem de to computere, vil loginprocessen være fuldautomatisk. I dette hurtige og beskidte eksempel bliver du bedt om adgangskoden til brugerkontoen på fjerncomputeren.

Dette script er "Heredoc-8.sh". Vi skal oprette forbindelse til en fjerncomputer kaldet "Remote-PC". Brugerkontoen hedder "Dave". Vi bruger -T. (Deaktiver Pseudo-terminal tildeling), fordi vi ikke har brug for en interaktiv pseudo-terminal, der skal tildeles til os.

I "Gør noget arbejde her" "af scriptet, kunne vi bestå en liste over kommandoer, og disse ville blive udført på den eksterne computer. Selvfølgelig kan du bare ringe til et script, der var på den eksterne computer. Fjern scriptet kunne holde alle de kommandoer og rutiner, du vil have udført.

Alt, hvad vores script-Heredoc-8.SH-vil gøre, er at opdatere en forbindelseslog på fjerncomputeren. Brugerkontoen og et tids- og datostempel er logget på en tekstfil.

 #! / Bin / bash

ssh -t [email protected] & lt; & lt; _remote_commands.

# Gør noget arbejde herinde

# Update Connection Log
ekko $ bruger "-" $ (dato) & gt; & gt; /home/dave/conn_log/script.log.
_remote_commands 

Når vi kører kommandoen, bliver vi bedt om adgangskoden til kontoen på fjern computer.

 ./ HEREDOC-8.SH 

Nogle oplysninger om fjerncomputeren vises, og vi returneres til kommandoprompten.

På den fjern computer, vi kan bruge kat For at kontrollere forbindelsesloggen:

 CAT CONN_LOG / SCRIPT.LOG 

Hver forbindelse er angivet for os.

RELATEREDE: Sådan oprettes og installerer SSH-nøgler fra Linux Shell

Mærkeligt navn, pæne funktioner

Her er dokumenter quirky, men kraftfulde, især når de bruges til at sende kommandoer til en fjerncomputer. Det ville være et simpelt spørgsmål at script en backup rutine ved hjælp af rsync. . Scriptet kunne derefter oprette forbindelse til fjernbetjeningen, kontrollere det resterende lagerplads og sende en advarsels-e-mail, hvis pladsen blev lavt.

RELATEREDE: Sådan sikkerhedskopieres dit Linux-system med RSYNC


Linux - Mest populære artikler

Hvad er bash ordbøger på Linux, og hvordan bruger du dem?

Linux Jun 16, 2025

fatmawati achmad zaenuri / shutterstock.com Bash Dictionaries giver dig hash kort og associative arrays i Linux Shell scripts. Vi viser dig, hvordan du bruge..


Sådan konfigureres eller deaktiverer Linux Mint Update Notifikationer

Linux Jul 9, 2025

Havde nok af Linux Mint's irriterende opdateringsmeddelelser? Eller måske er du så bekymret for at holde dig opdateret, du vil se dem endnu mere? Uanset hvad, justering af meddelelserne ..


Native spil på Linux kan være døende, og det er okay

Linux Sep 27, 2025

DC Studio / Shutterstock.com Det Dampdæk , annonceret i august 2021, har Linux Gaming Circles, der taler om fremtiden for Gaming på Linux. Dækket..


Linux bliver 30: Hvordan et hobbyprojekt erobrede verden

Linux Sep 17, 2025

Larry ewing og gimp På 17. september 1991 , Linus Torvalds frigivet Linux Kernel (version 0.01) for første gang. Her er et kort kig på, hvordan e..


KDE Connect er endelig Kommer til iPhone

Linux Oct 26, 2025

Kde. Hvis du leder efter en nem måde at gøre din iPhone, skal du spille godt med din Kde desktop. , i dag er din heldige dag, som KDE Connect er endeli..


Sådan downloader og installerer Steam på Linux

Linux Oct 9, 2025

Postmodern Studio / Shutterstock.com Så du vil prøve spil på Linux. ? I denne artikel skal du se på, hvordan man installerer damp på enhver Lin..


Hvordan man dræber en Linux -proces efter portnummer

Linux Oct 4, 2025

For at dræbe en Linux -proces har du brug for dens ID eller dens navn. Hvis alt hvad du ved er den port, den bruger, kan du stadig dræbe den? Ja, på flere forskellige måder. Dræbende..


Sådan får du din offentlige IP i et Linux Bash -script

Linux Nov 9, 2025

Du har brug for din eksterne IP -adresse, hvis du vil eksternt oprette forbindelse til din computer. At finde det manuelt er let, men her er hvordan du finder din det inden for et Linux -script..


Kategorier