Hur man använder ”här Documents” i Bash på Linux

Mar 31, 2025
Linux
Fatmawati Achmad Zaenuri / Shutterstock

Den konstigt namngivna "här dokument" låter dig använda inmatning / ut omdirigering inuti bash-skript på Linux. De är ett bra sätt att automatisera kommandon du behöver köra på en fjärrdator.

Här dokument

Många kommandon i Linux har två eller tre bokstäver. Detta är delvis vad som ger upphov till tanken att Linux är svårt att lära sig och full av Arcane-kommandon. Men ett av de konstigaste namnen i Linux är inte en av de kryptiskt korta. "Här dokument" är inte dokument, och det är inte riktigt klart vad "här" avser heller.

De är en relativt obskyra konstruktion, men de är användbara. Naturligtvis är det här Linux, så det finns mer än ett sätt att skinka en katt. En del av funktionaliteten som tillhandahålls av här dokument kan reproduceras på andra sätt. De alternativa metoderna är vanligtvis mer komplicerade. I programmering och skript betyder "mer komplicerat" också "mer benägna att buggar", och att din kod är svårare att behålla.

Var här dokument verkligen Excel är i automatisering av kommandon som du vill skicka till en fjärrdator från en anslutning som är etablerad från ett skript. Att göra anslutningen är lätt, men när anslutningen har gjorts, hur "pumpar du" dina kommandon från ditt skript i skalet på fjärrdatorn? Här kan du göra det enkelt.

Grundläggande principer för här dokument

Den idiomatiska representationen av ett här dokument ser ut så här:

 Command & LT; & LT; Limit_String
 .
 .
text
data
variabler
.
.
Limit_String 
  • KOMMANDO : Detta kan vara något Linux-kommando som accepterar omdirigerad ingång. Notera eko kommando accepterar inte omdirigerad inmatning . Om du behöver skriva till skärmen kan du använda katt kommando, vilket gör .
  • & lt; & lt; : Omdirigeringsoperatören.
  • Limit_String : Detta är en etikett. Det kan vara vad du än gillar så länge det inte visas i listan över data som du omdirigerar i kommandot. Den används för att markera slutet av listan över text, data och variabler.
  • Datalista : En lista över data som ska matas till kommandot. Det kan innehålla kommandon, text och variabler. Innehållet i datalistan matas in i kommandot en rad i taget tills _limit_string uppstår.

Du kommer förmodligen att se exempel på här dokument som använder "EOF" som gränssträng. Vi gynnar inte det tillvägagångssättet. Det fungerar, men "EOF" betyder "slutet på filen." Bortsett från det sällsynta fallet där ett hemdokument är det sista i en skriptfil, används "EOF" felaktigt.

Det kommer att göra dina skript mycket mer läsbara om du använder en gränssträng som hänvisar till vad du gör. Om du skickar en serie kommandon till en fjärrdator över Säkert skal (SSH), en gränssträng kallad något som "_Remote_commands" skulle göra perfekt mening. Du behöver inte starta dem med en understrykning " _ " karaktär. Vi gör det eftersom det markerar dem som något vanligt i ditt skript.

Enkla exempel

Du kan använda här dokument på kommandoraden och i skript. När du skriver följande i ett terminalfönster ser du en " & gt; "Linje fortsättningsprompten varje gång du slår" Enter. " När du skriver "_End_of_text" -gränssträngen och trycker på "Enter", skickas "listan över webbplatser till katt, och de visas i terminalfönstret.

 Cat & Lt; & lt; _End_of_text
How-to Geek
Granska geek
Lifesavvy
Cloudsavvy det
Minne
_End_of_text 

Det är inte det mest värda övningarna, men det visar att ingenting skickas till kommandot tills hela listan med data samlas och gränssträngen uppstår. De katt Kommandot mottar inte någon ingång tills du anger gränssträngen "_End_of_text" och tryck på "Enter" -knappen.

Vi kan göra samma sak i ett manus. Skriv eller kopiera det här exemplet till en redigerare, spara filen som "Heredoc-1.sh" och stäng redaktören.

 #! / Bin / bash

katt & lt; & lt; "_End_of_text"
Ditt användarnamn är: $ (Whoami)
Din nuvarande arbetskatalog är: $ pwd
Din Bash-version är: $ BASH_VERSION
_End_of_text 

När du följer den här artikeln måste du varje gång du skapar ett skript göra det körbart innan det kommer att springa. I varje fall, Använd chmod kommando . Byt namn på skriptet i varje exempel för det skriptnamn som används här.

 Chmod + x Heredoc-1.sh 

Detta skript innehåller två miljövariabler, $ Pwd och $ Bash_version . De miljövariabla namnen ersätts med deras datavärden - den aktuella arbetskatalogen och versionen av Bash-när skriptet utförs.

Skriptet använder också Kommandoutbyte de vem är jag kommando . Kommandot namn ersätts med egen produktion. Utgången från hela skriptet är skrivet till terminalfönstret med CAT-kommandot. Vi kör skriptet genom att ringa det med namn:

. / Heredoc-1.sh 

Om du ändrar skriptet och lindrar gränssträngen i den första raden i det här dokumentet i citattecken " " "Datalistan skickas till det här dokumentkommandot ordentligt. Variabelnamn visas istället för variabla värden, och kommandosutbytet kommer inte att äga rum.

 #! / Bin / bash

Cat & LT; & LT; - "_End_of_text"
Ditt användarnamn är: $ (Whoami)
Din nuvarande arbetskatalog är: $ pwd
Din Bash-version är: $ BASH_VERSION
_End_of_text 

Hantering Tab-tecken

Som standard kommer flikstecken i din datalista att behållas och skrivas till terminalfönstret. Kopiera och spara det här exemplet som "Heredoc-2.sh". Gör det körbart med hjälp av chmod kommando. Redigera de indragna linjerna för att se till att de har en eller två flikstecken i början av linjen istället för en serie mellanslag.

 #! / Bin / bash

katt & lt; & lt; _End_of_text
Ditt användarnamn är: $ (Whoami)
  Din nuvarande arbetskatalog är: $ pwd
    Din Bash-version är: $ BASH_VERSION
_End_of_text 
. / Heredoc-2.sh 

Flikarna är skrivna till terminalfönstret.

Genom att lägga till ett streck " - "Till omdirigeringsoperatören kommer det här dokumentet att ignorera ledande flikstecken. Spara det här exemplet som "Heredoc-3.sh" och gör det körbart.

 #! / Bin / bash

Cat & LT; & LT; - _End_of_text
Ditt användarnamn är: $ (Whoami)
  Din nuvarande arbetskatalog är: $ pwd
    Din Bash-version är: $ BASH_VERSION
_End_of_text 
. / Heredoc-3.sh 

Flikarna ignoreras. Det kan tyckas trivialt, men det är ett snyggt sätt att klara av ledande flikar på grund av indragna delar av skript.

Loops och andra logiska konstruktioner är vanligtvis indragna. Om ditt här dokument finns i en indragad del av ett skript med hjälp av ett streck " - "Med omdirigeringsoperatören tar bort formatering av problem som orsakas av de ledande flikstyperna.

 #! / Bin / bash

om sant; sedan
  Cat & Lt; & lt; - _limit_string
  Linje 1 med en ledande flik.
  Linje 2 med en ledande flik.
  Linje 3 med en ledande flik.
  _limit_string
fi 

Omdirigera till en fil

Utmatningen från kommandot som används med här dokumentet kan omdirigeras till en fil. Använd " & gt; "(Skapa filen) eller" & gt; & gt; "(Skapa filen om den inte existerar, lägg till filen om den gör) omdirigeringsoperatörer efter Gränssträngen i den första raden i här dokumentet.

Detta skript är "Heredoc-4.sh." Det kommer att omdirigera sin utgång till en textfil som heter "session.txt."

 #! / Bin / bash

katt & lt; & lt; _End_of_text & gt; session.txt
Ditt användarnamn är: $ (Whoami)
Din nuvarande arbetskatalog är: $ pwd
Din Bash-version är: $ BASH_VERSION
_End_of_text 
. / Heredoc-4.sh 
 Cat Session.Text 

Rör utmatningen till ett annat kommando

Utgången från kommandot som används i ett här dokument kan pipas som ingång till ett annat kommando. Använda sig av röret " H "Operatör efter Gränssträngen i den första raden i här dokumentet. Vi ska pipa utmatningen från kommandot här, katt , in i sed . Vi vill ersätta alla händelser av bokstaven ”a” med bokstaven ”e”.

Namnge detta script ”heredoc-5.sh.”

 #! / Bin / bash

katt & lt; & lt; _end_of_text | sed 's / a / e / g'
Hur
Till
Gaak
_End_of_text 
 ./ heredoc-5.sh 

”Gaak” korrigeras till ”Geek”.

Sända parametrar till en funktion

Kommandot som används med en här dokumentet kan vara en funktion i skriptet.

Detta skript passerar vissa fordonsdata till en funktion. Funktionen läser data som om det hade skrivits in av en användare. Värdena för variablerna sedan ut. Spara skriptet som ”heredoc-6.sh”.

 #! / Bin / bash

# de set_car_details funktion ()
set_car_details ()
{
Läs make
Läs modell
läs new_used
Läs delivery_collect
Läs plats
Läs pris
}

# Det här dokumentet som passerar data till set_car_details ()
set_car_details & lt; & lt; _mars_rover_data
NASA
uthållighet Rover
Begagnade
Samla
Mars (lång, lat) 77.451865,18.445161
2,2 miljarder
_mars_rover_data

# Hämta fordonsuppgifter
echo "Make: $ make"
echo "Modell: $ model"
echo "ny eller begagnad: $ new_used"
echo "leverans eller Collection: $ delivery_collect"
echo "Plats: $ location"
echo "Pris \ $: $ price" 
 ./ heredoc-6.sh 

Fordons detaljer skrivs till terminalfönstret.

Skapa och skicka e-post

Vi kan använda en här dokumentet för att skriva och skicka ett e-postmeddelande. Observera att vi kan skicka parametrar till kommandot framför omdirigering operatören. vi är med hjälp av Linux post kommando till skicka ett e-post via det lokala postsystemet till användarkontot som kallas ”Dave”. De -s (Ämne) option ger oss möjlighet att ange ämne för e-postmeddelandet.

Detta exempel formulär script ”heredoc-7.sh.”

 #! / Bin / bash

artikeln = "Här Documents"

mail -s arbetsbörda status Dave & lt; & lt; _projekt rapport
Användarnamn: $ (whoami)
Har avslutat uppdrag:
Artikel: $ artikeln
_project_report 
 ./ heredoc-7.sh 

Det finns ingen synlig utdata från skriptet. Men när vi kontrollera vår e-post, ser vi att e-postmeddelandet var sammansatt, skickas och levereras.

 post 

Använda Här Dokument med SSH

Här dokument är ett kraftfullt och bekvämt sätt att utföra vissa kommandon på en fjärrdator när en SSH-anslutning har upprättats. Om du har ställt in SSH-nycklar mellan två datorer, kommer inloggningsprocessen vara helautomatiskt. I denna snabba och smutsiga exempel, kommer du att bli tillfrågad om lösenordet för användarkontot på fjärrdatorn.

Detta skript är ”heredoc-8.sh”. Vi kommer att ansluta till en fjärrdator som kallas ”remote-pc”. Användarkontot kallas ”Dave”. Vi använder -T (Inaktivera pseudo-terminal tilldelning) alternativet eftersom vi inte behöver en interaktiv pseudo-terminal tilldelas oss.

I ”göra en del arbete här” i skriptet kan vi passera en lista med kommandon, och dessa skulle utföras på fjärrdatorn. Naturligtvis kan du bara ringa ett skript som var på fjärrdatorn. Fjärr script kunde hålla alla kommandon och rutiner som du vill ha utfört.

Allt som vårt skript-heredoc-8.sh-kommer att göra är att uppdatera en anslutningslogg på fjärrdatorn. Användarkontot och en tid och datumstämpel loggas till en textfil.

 #! / Bin / bash

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

# Göra en del arbete här

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

När vi kör kommandot, vi tillfrågas om lösenordet för kontot på avlägsen dator.

 ./ heredoc-8.sh 

Viss information om fjärrdatorn visas och vi återvände till kommandotolken.

avlägsen dator, kan vi använda katt att kontrollera anslutningsloggen:

 katt conn_log / script.log 

Varje anslutning visas för oss.

RELATERAD: Så här skapar du och installerar SSH-nycklar från Linux-skalet

Konstigt namn, snygga finesser

Här är dokumenten quirky men kraftfulla, speciellt när de används för att skicka kommandon till en fjärrdator. Det skulle vara en enkel sak att skript en backup rutin med rsync . Skriptet kan sedan ansluta till fjärrdatorn, kontrollera det återstående lagringsutrymmet och skicka ett varningsmeddelande om utrymme blev lågt.

RELATERAD: Så här säkerhetskopierar du ditt Linux-system med rsync


Linux - Mest populära artiklar

Hur man använder strace att övervaka Linux-system samtal

Linux Jun 23, 2025

fatmawati achmad zaenuri / shutterstock.com Linux-program frågar kärna att göra några saker för dem. De strace Command avslöjar d..


5 Specialized Linux Distributions med unika funktioner

Linux Jul 20, 2025

Läsa igenom cartoonishly lång lista med befintliga Linux-distributioner, de diverse smaker och off-skott av off-skott alla börjar att sudda ihop. För att råda bot det har vi samlat n�..


Vad är nytt i Elementary OS 6 "ODIN"

Linux Aug 14, 2025

Elementary, Inc. Det finns Många Linux-distributioner (Distros) som människor hävdar är bra ersättningar för Windows eller MacOS. Men det finns få som..


Vad är nytt i Linux Kernel 5.14

Linux Sep 9, 2025

Sean Locke Photography / Shutterstock Eftersom Linux varv 30 år gammal har Kernel 5.14 släppts. Den innehåller det vanliga breda erbjudandet av inre under-t..


Hur man stänger av en Ubuntu PC

Linux Oct 12, 2025

Liksom alla personliga datorer, kör en dator Ubuntu Desktop operativsystem måste stängas av då och då. Att stänga av Ubuntu är lätt, och du har flera metoder till ditt f..


Hur uppdaterar Fedora Linux

Linux Nov 10, 2024

Så, du äntligen laddat ner och installerade Fedora Linux, men nu kan du undra, hur håller du ditt system uppdaterat? Tack och lov, Fedora ger dig ett par metoder för systemuppdateringa..


Hur man dödar en Linux -process efter portnummer

Linux Oct 4, 2025

För att döda en Linux -process behöver du dess ID eller dess namn. Om allt du vet är porten den använder, kan du fortfarande döda den? Ja, på flera olika sätt. Dödande processer ..


Hur man hittar PID i en Linux -process med PIDOF eller PREP

Linux Nov 15, 2024

Att arbeta med en Linux -process innebär ofta att känna till sitt process -ID eller PID. Det är ett unikt nummer som ges till varje bit av löpande programvara. Här är två sätt att ta re..


Kategorier