Android

Bash heredoc

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

What is a heredoc? Here Documents Explained | Linux Terminal 201 - HakTip 179

Innholdsfortegnelse:

Anonim

Når du skriver skallskript, kan du være i en situasjon der du trenger å sende en flersidig blokk med tekst eller kode til en interaktiv kommando, for eksempel tee , cat eller sftp .

I Bash og andre skjell som Zsh, er et Here-dokument (Heredoc) en type omdirigering som lar deg sende flere linjer med input til en kommando.

Syntaksen til å skrive HereDoc har følgende form:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Den første linjen starter med en valgfri kommando etterfulgt av den spesielle viderekoblingsoperatøren << og avgrensningsidentifikatoren.
    • Du kan bruke hvilken som helst streng som en avgrensende identifikator, den mest brukte er EOF eller END.If avgrensningsidentifikatoren er ikke sitert, vil skallet erstatte alle variabler, kommandoer og spesialtegn før du sender hier-dokumentlinjene til kommandoen. minustegn til omdirigeringsoperatøren <<- , vil føre til at alle ledende fanetegn blir ignorert. Dette lar deg bruke innrykk når du skriver her-dokumenter i skallskript. Ledende mellomromstegn er ikke tillatt, bare fane.
    Blokkene her-dokumentet kan inneholde strenger, variabler, kommandoer og enhver annen type inndata. Den siste linjen slutter med avgrensningsidentifikatoren. Hvit plass foran avgrenseren er ikke tillatt.

Grunnleggende heredoc-eksempler

I dette avsnittet skal vi se på noen grunnleggende eksempler på hvordan du bruker heredoc.

Heredoc brukes ofte i kombinasjon med kattekommandoen.

I det følgende eksemplet passerer vi to linjer med tekst som inneholder en miljøvariabel og en kommando til cat ved hjelp av et her-dokument.

cat << EOF The current working directory is: $PWD You are logged in as: $(whoami) EOF

Som du ser fra utdataene nedenfor, erstattes både variabelen og kommandoutgangen:

The current working directory is: /home/linuxize You are logged in as: linuxize

La oss se hva som vil skje hvis vi omslutter avgrenseren i enkle eller doble sitater.

cat <<- "EOF" The current working directory is: $PWD You are logged in as: $(whoami) EOF

Du kan legge merke til at når kvitteringen er sitert, blir ingen parameterutvidelse og kommandosubstitusjon utført av skallet.

The current working directory is: $PWD You are logged in as: $(whoami)

if true; then cat <<- EOF Line with a leading tab. EOF fi

Line with a leading tab.

I stedet for å vise utdataene på skjermen kan du omdirigere den til en fil ved å bruke > , >> -operatørene.

cat << EOF > file.txt The current working directory is: $PWD You are logged in as: $(whoami) EOF

Hvis file.txt ikke eksisterer, vil den bli opprettet. Når du bruker > vil filen overskrives, mens >> vil legge utdata til filen.

Heredoc-inngangene kan også røres. I det følgende eksemplet vil sed kommandoen erstatte alle forekomster av l tegnet med e :

cat <<'EOF' | sed 's/l/e/g' Hello World EOF

Heeeo Wored

Slik skriver du pipedataene til en fil:

cat <<'EOF' | sed 's/l/e/g' > file.txt Hello World EOF

Bruker Heredoc med SSH

Å bruke Heredoc er en av de mest praktiske og enkleste måtene å utføre flere kommandoer på et eksternt system over SSH.

Når du bruker unoterte avgrensere, må du sørge for å slippe unna alle variabler, kommandoer og spesialtegn ellers blir de interpolert lokalt:

ssh -T [email protected] << EOF echo "The current local working directory is: $PWD" echo "The current remote working directory is: \$PWD" EOF

The current local working directory is: /home/linuxize The current remote working directory is: /home/user

Det kan også være lurt å sette opp en SSH-nøkkelbasert autentisering og koble til Linux-serverne dine uten å oppgi et passord.

Konklusjon

I denne guiden har du lært hva som er heredoc og hvordan du bruker det i skallskriptene dine.

bash terminal