Hoe gebruiken “Hier documenten” in Bash op Linux

Mar 31, 2025
Linux
Fatmawati achmad zaenuri / shutterstock

De vreemd genoemde "hier documenten" laat u invoer / uitverwijderingen in de bash-scripts op Linux gebruiken. Ze zijn een geweldige manier om opdrachten te automatiseren die je nodig hebt om op een externe computer te lopen.

Hier documenten

Veel commando's in Linux hebben twee of drie letternamen. Dit is deels wat aanleiding geeft tot het idee dat Linux moeilijk is om te leren en vol met arcane-opdrachten. Maar een van de raarste namen in Linux is niet een van de cryptisch korte. "Hier documenten" zijn geen documenten, en het is niet echt duidelijk wat de "hier" verwijst, ook.

Ze zijn een relatief obscure construct, maar ze zijn handig. Natuurlijk is dit Linux, dus er is meer dan één manier om een ​​kat te hinderen. Sommige van de hier verstrekte functionaliteit kunnen op andere manieren worden gereproduceerd. Die alternatieve methoden zijn meestal gecompliceerder. In programmering en scripting betekent "meer gecompliceerder" ook "meer vatbaar voor bugs" en dat uw code moeilijker is om te onderhouden.

WAAR HIER DOCUMENTEN ECHT EXCEL is Excel in de automatisering van opdrachten die u naar een externe computer wilt verzenden vanuit een verbinding van binnen een script. Het maken van de verbinding is eenvoudig, maar zodra de verbinding is gemaakt, hoe kunt u uw opdrachten "pompen" van uw script in de shell op de externe computer? Hiermee kunt u dat heel eenvoudig doen.

Basisbeginselen van hier documenten

De idiomatische weergave van een hier document ziet er als volgt uit:

 Command & LT; & LT; limiet_string
 .
 .
tekst
gegevens
variabelen
.
.
limiet_string 
  • OPDRACHT : Dit kan een Linux-opdracht zijn die omgeleid ingang accepteert. Merk op echo opdracht Accepteert niet omgeleid ingang . Als u naar het scherm moet schrijven, kunt u de kat opdracht, wat doet .
  • & lt; & lt; : De Operator van de omleiding.
  • limiet_string : Dit is een label. Het kan zijn wat je wilt zolang het niet verschijnt in de lijst met gegevens die je in de opdracht wordt omgedraaid. Het wordt gebruikt om het einde van de tekst, gegevens en variabelenlijst te markeren.
  • Gegevenslijst : Een lijst met gegevens die moet worden toegevoerd aan de opdracht. Het kan opdrachten, tekst en variabelen bevatten. De inhoud van de data-lijst wordt in de opdracht één regel tegelijk ingevoerd totdat de _limit_string wordt aangetroffen.

U zult waarschijnlijk voorbeelden van hier documenten zien die "EOF" gebruiken als de limietreeks. We zijn de voorkeur aan die aanpak. Het werkt, maar "EOF" betekent "Einde van het bestand". Afgezien van het zeldzame geval waar een thuisdocument het laatste is in een scriptbestand, wordt "EOF" ten onrechte gebruikt.

Het maakt uw scripts veel meer leesbaar als u een limietreeks gebruikt die verwijst naar wat u doet. Als u een reeks commando's naar een externe computer verzendt Scheepvaart (Ssh), een limietreeks genaamd iets als "_remote_commands" zou volkomen logisch zijn. Je hoeft ze niet te starten met een onderstrepingsteken " _ " karakter. Dat doen we omdat het ze markeert als iets buitengewoons in je script.

Eenvoudige voorbeelden

U kunt hier documenten gebruiken op de opdrachtregel en in scripts. Wanneer u het volgende in een terminalvenster typt, ziet u een " & GT; "LINE VERVOLGING VRAGEN Telkens wanneer u op" Enter "drukt" Wanneer u de limietreeks "_END_OF_TEXT" typt en druk op "ENTER", wordt de lijst met websites doorgegeven aan kat, en ze worden weergegeven in het terminalvenster.

 CAT & LT; & LT; _end_of_text
How-to Geek
Beoordeling Geek
Lifesavvy
Cloudsavvy het
Mindbounce
_end_of_text 

Dat is niet de meest de moeite waard om oefeningen, maar het toont aan dat niets naar het commando wordt gestuurd totdat de volledige lijst met gegevens wordt verzameld en de limietreeks wordt aangetroffen. De kat Opdracht ontvangt geen invoer totdat u de limietreeks "_end_of_text" invoert en druk op de toets "Enter".

We kunnen hetzelfde in een script doen. Typ of kopieer dit voorbeeld in een editor, sla het bestand op als "Heredoc-1.SH" en sluit de editor.

 #! / Bin / bash

CAT & LT; & LT; "_end_of_text"
Uw gebruikersnaam is: $ (whoami)
Uw huidige werkmap is: $ PWD
Je bash-versie is: $ Bash_version
_end_of_text 

Zoals u dit artikel volgt, moet u elke keer dat u een script maakt, dan moet u maak het uitvoerbaar voordat het wordt uitgevoerd. In ieder geval, gebruik de chmod opdracht . Vervang de naam van het script in elk voorbeeld voor de hier gebruikte scriptnaam.

 CHMOD + X HEREDOC-1.SH 

Dit script bevat twee omgevingsvariabelen, $ Pwd en $ Bash_version . De variabele namen van het milieu worden vervangen door hun gegevenswaarden - de huidige werkdirectory en de versie van bash-wanneer het script wordt uitgevoerd.

Het script gebruikt ook opdrachtvervanging Aan de wie ben ik opdracht . De naam van de opdracht wordt vervangen door zijn eigen uitvoer. De uitvoer van het volledige script is door de CAT-opdracht naar het Terminal-venster geschreven. We lopen het script door het op naam te roepen:

 ./ Heredoc-1.SH 

Als u het script aanpast en de limietreeks in de eerste regel van het hier document in aanhalingstekens wilt wikkelen " " ", De data-lijst wordt doorgegeven aan het document-opdracht Verbatim. Variabele namen worden weergegeven in plaats van variabele waarden en opdrachtsubstitutie zal niet plaatsvinden.

 #! / Bin / bash

CAT & LT; & LT; - "_END_OF_TEXT"
Uw gebruikersnaam is: $ (whoami)
Uw huidige werkmap is: $ PWD
Je bash-versie is: $ Bash_version
_end_of_text 

Handling Tab-tekens

Standaard worden tabparakters in uw data-lijst vastgehouden en geschreven naar het terminalvenster. Kopieer en sla dit voorbeeld op als "Heredoc-2.SH." Maak het uitvoerbaar gebruik met behulp van de chmod opdracht. Bewerk de ingesprongen lijnen om ervoor te zorgen dat ze een of twee tab-tekens hebben aan het begin van de regel in plaats van een reeks ruimtes.

 #! / Bin / bash

CAT & LT; & LT; _end_of_text
Uw gebruikersnaam is: $ (whoami)
  Uw huidige werkmap is: $ PWD
    Je bash-versie is: $ Bash_version
_end_of_text 
 ./ Heredoc-2.SH 

De tabbladen worden naar het terminalvenster geschreven.

Door een dashboard toe te voegen " - "Naar de Operator Redirection-operator zal het document hieraan leidende tabletjes negeren. Bewaar dit voorbeeld als "Heredoc-3.SH" en maak het uitvoerbaar bestand.

 #! / Bin / bash

CAT & LT; & LT; - _END_OF_TEXT
Uw gebruikersnaam is: $ (whoami)
  Uw huidige werkmap is: $ PWD
    Je bash-versie is: $ Bash_version
_end_of_text 
 ./ Heredoc-3.SH 

De tabbladen worden genegeerd. Dit lijkt misschien triviaal, maar het is een nette manier om met leidende tabbladen om te gaan als gevolg van ingesprongen secties van scripts.

Loops en andere logische constructen zijn meestal ingesprongen. Als uw hier document is ingesloten in een ingesprongen gedeelte van een script, met behulp van een dashboard " - "Met de Operator Redirection verwijdert de opmaakproblemen die worden veroorzaakt door het toonaangevende tabletsen.

 #! / Bin / bash

als het waar is; dan
  CAT & LT; & LT; - _limit_string
  Regel 1 met een toonaangevend tabblad.
  Regel 2 met een toonaangevend tabblad.
  Lijn 3 met een toonaangevend tabblad.
  _limit_string
fi 

Doorverwijzing naar een bestand

De uitvoer van de opdracht die wordt gebruikt met het HIER-document kan in een bestand worden omgeleid. Gebruik de " & GT; "(Maak het bestand) of" & GT; & GT; "(Maak het bestand als het niet bestaat, voegt u toe aan het bestand als deze doet) Operirectorators na de limietreeks in de eerste regel van het hier document.

Dit script is "Heredoc-4.SH." Het zal zijn uitvoer doorverwijzen naar een tekstbestand genaamd "session.txt."

 #! / Bin / bash

CAT & LT; & LT; _end_of_text & gt; session.txt
Uw gebruikersnaam is: $ (whoami)
Uw huidige werkmap is: $ PWD
Je bash-versie is: $ Bash_version
_end_of_text 
 ./ Heredoc-4.SH 
 CAT SESSIE.TEXT 

De uitvoer naar een andere opdracht leidt

De uitvoer van de opdracht die in een hier wordt gebruikt, kan worden gepipperd als de invoer naar een andere opdracht. Gebruik maken van de pijp " | "Operator na de limietreeks in de eerste regel van het hier document. We gaan de output uit de functie hier document pijpen, kat , naar binnen sed . Wij willen Vervang alle gebeurtenissen van de letter “a” met de letter “e”.

Noem dit script “heredoc-5.sh.”

 #! / Bin / bash

CAT & LT; & LT; _end_of_text | sed 's / a / e / g'
Hoe
Tot
Gaak
_end_of_text 
 ./ heredoc-5.sh 

“Gaak” is gecorrigeerd “Geek.”

Het verzenden van parameters aan een functie

De opdracht die wordt gebruikt met een hier document kan een functie in het script.

Dit script geeft een aantal gegevens van het voertuig in een functie. De functie leest de gegevens alsof het in door een gebruiker had getypt. De waarden van de variabelen worden vervolgens afgedrukt. Sla dit script als “heredoc-6.sh”.

 #! / Bin / bash

# Het set_car_details () functie
set_car_details ()
{
leesbaar maken
read model
lees new_used
read delivery_collect
read locatie
read prijs
}

# De hier document dat de gegevens naar set_car_details passeert ()
set_car_details & lt; & lt; _mars_rover_data
NASA
doorzettingsvermogen Rover
Gebruikt
Verzamelen
Mars (lang, lat) 77.451865,18.445161
2,2 miljard
_mars_rover_data

# Haal de voertuiggegevens
echo "Merk: $ make"
echo "Model: $ model"
echo "Nieuw of Gebruikt: $ new_used"
echo "Delivery of Collection: $ delivery_collect"
echo "Location: $ locatie"
echo "Prijs \ $: $ price" 
 ./ heredoc-6.sh 

De voertuiggegevens worden geschreven naar de terminal venster.

Maken en verzenden van een e-mail

We kunnen hier document gebruiken maken en verzenden van een e-mail. Merk op dat we de parameters kunnen doorgeven aan het commando in de voorkant van de omleiding operator. Waren met behulp van de Linux mail opdracht tot stuur dan een e-mail via de lokale mailsysteem aan de gebruiker met de naam “dave”. De -s optie (onder voorbehoud) stelt ons in staat om het onderwerp van de e-mail op te geven.

Dit voorbeeld vormen script “heredoc-7.sh.”

 #! / Bin / bash

article = "Hier Documents"

mail -s 'Workload status' Dave & lt; & lt; _projectrapport
User name: $ (whoami)
Heeft voltooide opdracht:
Artikel: article $
_project_report 
 ./ heredoc-7.sh 

Er is geen zichtbare output van dit script. Maar toen we onze mail te checken, zien we dat de e-mail was samengesteld, verzonden, en afgeleverd.

 mail 

Met behulp Hier Documenten met SSH

Hier documenten zijn een krachtige en handige manier om een ​​aantal opdrachten uit te voeren op een externe computer zodra een SSH-verbinding tot stand is gebracht. Als u hebt ingesteld SSH-sleutels tussen de twee computers, zal het login proces volledig automatisch. In deze snelle en vuile voorbeeld, wordt u gevraagd om het wachtwoord voor de gebruikersaccount op de externe computer.

Dit script is “heredoc-8.sh”. We gaan verbinding met een externe computer met de naam “remote-pc”. De gebruikersaccount heet “dave”. We gebruiken de -T optie (disable pseudo-terminal toewijzing) omdat we niet een interactief pseudo-terminal worden toegewezen aan ons nodig heeft.

In de “doe wat werk hier” sectie van het script, konden we een lijst met commando's passeren, en deze zou worden uitgevoerd op de externe computer. Natuurlijk kan je gewoon bellen een script dat was op de externe computer. De afstandsbediening script kan alle commando's en routines die je wilt hebben geoefend te houden.

Het enige dat ons script-heredoc-8.sh-gaat doen is werken een verbinding log op de externe computer. De gebruikersaccount en een tijd en datum worden vastgelegd in een tekstbestand.

 #! / Bin / bash

ssh -T [email protected] & lt; & lt; _remote_commands

# Doen wat werk hier

#-Update verbinding log
echo $ USER "-" $ (datum) & gt; & gt; /home/dave/conn_log/script.log
_remote_commands 

Toen we de opdracht uit te voeren, zijn we gevraagd om het wachtwoord voor de account op de op afstand computer.

 ./ heredoc-8.sh 

Wat informatie over de computer op afstand wordt weergegeven, en we zijn terug naar de opdrachtprompt.

Op de op afstand computer, kunnen we gebruik maken van kat om de verbinding te bekijken:

 cat conn_log / script.log 

Elke verbinding wordt vermeld voor ons.

VERWANT: Hoe SSH-toetsen van de Linux Shell te maken en te installeren

Vreemde naam, leuke features

Hier zijn documenten eigenzinnig maar krachtig, vooral wanneer het wordt gebruikt om opdrachten naar een externe computer te verzenden. Het zou een eenvoudige zaak zijn om een ​​back-uproutine te script met behulp van rsync . Het script kan vervolgens verbinding maken met de externe computer, controleer de resterende opslagruimte en stuurt u een waarschuwingsmail als de ruimte laag werd.

VERWANT: Hoe maak je een back-up van je Linux-systeem met rsync


Linux - Meest populaire artikelen

Hoe te vinden en verwijderen Broken Symlinks op Linux

Linux Nov 12, 2024

Fatmawati achmad zaenuri / shutterstock De symbolische koppelingen op Linux zijn een fantastische eigenschap, maar ze kunnen gebroken en achtergelaten worden..


Wat is nieuw in Ubuntu 21.04 ‘Hirsute Hippo’

Linux Apr 22, 2025

De gloednieuwe afgifte van Ubuntu 21.04 , de Hirsute Hippo, werd vrijgegeven op 22 april 2021. Het is een interim-release van de populaire Linux-distributie, met slechts negen..


Wat is nieuw in GNOME 40?

Linux Jul 23, 2025

GNOME Foundation GNOME 40 heeft meer dan een nieuwe nummering. Samen met zijn nieuwe look komt er een nieuwe manier van werken. De oude verticale metaforen z..


Wat is nieuw in Fedora 35

Linux Nov 2, 2024

Fedora 35, rode Hoed Gratis Linux-distributie (Distro), werd uitgebracht op 2 november 2021. Van een bijgewerkte desktopervaring tot achter-de-scènes tweaks, we kijk..


Ubuntu 21,10 uitgerust met een aangepaste GNOME bureaublad 40

Linux Oct 14, 2025

Ubuntu Als je een Ubuntu-gebruiker bent, of iemand die erover nadenkt om het eens te proberen, is vandaag een goede dag. Canonical heeft Ubuntu 21.10 officieel vrijgegeve..


Hoe toepassingen en scripts te integreren in een Linux -bureaublad

Linux Oct 10, 2025

Op Linux zal een applicatie zonder een desktopbestand niet integreren met uw desktopomgeving. De meeste applicaties bieden één, maar af en toe moet u er een maken. Het is vrij eenvoudig, volg..


Hoe omgevingsvariabelen op Linux te vermelden

Linux Oct 31, 2025

Op Linux bevatten omgevingsvariabelen belangrijke waarden en instellingen. Scripts, toepassingen en shells lezen deze waarden, vaak om zichzelf te configureren of om hun gedrag te beheersen. Hi..


Hoe een statisch IP -adres in te stellen in Ubuntu

Linux Oct 17, 2025

Uw thuisnetwerk is gebaseerd op IP -adressen om gegevens tussen apparaten te routeren, en soms op het opnieuw verbinden met het netwerk dat het adres van een apparaat kan veranderen. Hier leest..


Categorieën