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

Sådan dræber man zombieprocesser på Linux

Linux Nov 25, 2024

FATMAWATI ACHMAD ZAENURI / SHUTTERSTOCK Programmer, der er dårligt skrevet eller udfører dårligt, kan forlade zombie processer. lurker inde i din..


Sådan installeres Signal Desktop på Linux

Linux Jan 22, 2025

Eliseu Geisler / Shutterstock.com Signal er Privacy-fokuserede smartphone messaging app alle synes at bruge . Du kan også bruge signal p..


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..


Ubuntu 21.10 ankommer med en tilpasset GNOME 40 Desktop

Linux Oct 14, 2025

Ubuntu. Hvis du er en Ubuntu-bruger, eller nogen, der tænker på at give det en chance, er i dag en god dag. Canonical har officielt udgivet Ubuntu 21.10 med en tilpasse..


Sådan Turn Off en Ubuntu PC

Linux Oct 12, 2025

Ligesom alle personlige computere, en pc kører Ubuntu. Desktop operativsystemet skal være slukket nu og derefter. Lukning af Ubuntu er let, og du har flere metoder til din rå..


Hvad er nyt i Ubuntu 21.10 ’Impish Indri’

Linux Oct 14, 2025

Canonical. Ubuntu 21.10 "Impish Indri" var Udgivet den 14. oktober 2021. Det har funktioner GNOME 40. , en ny kerne- og opdaterede applikat..


Sådan installeres Linux på en M1 Mac med Apple Silicon

Linux Nov 11, 2024

Indfødt Linux Support til Apples nye armbaserede arkitektur er endnu ikke klar, men du kan køre Linux på en M1. , M1 PRO, eller M1 MAX ved hjælp af a Virtual Machine. ..


Sådan opdateres Fedora Linux

Linux Nov 10, 2024

Så, du endelig downloadet og installeret Fedora Linux, men nu kan du undre dig, hvordan holder du dit system opdateret? Heldigvis giver Fedora dig et par metoder til systemopdateringer. L..


Kategorier