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

Indholdsfortegnelse:

Anonim

Når du skriver shell-scripts, kan du være i en situation, hvor du har brug for at videregive en multiline blok af tekst eller kode til en interaktiv kommando, f.eks. tee , cat eller sftp .

I Bash og andre skaller som Zsh er et Here-dokument (Heredoc) en type omdirigering, der giver dig mulighed for at videregive flere linjer med input til en kommando.

Syntaksen til at skrive HereDoc har følgende form:

<< 'DELIMITER' HERE-DOCUMENT DELIMITER

  • Den første linje starter med en valgfri kommando efterfulgt af den specielle omdirigeringsoperatør << og afgrænsningsidentifikatoren.
    • Du kan bruge en hvilken som helst streng som en afgrænsningsidentifikator, de mest almindeligt anvendte er EOF eller END.If afgrænsningsidentifikatoren er ikke citeret, erstatter skallen alle variabler, kommandoer og specialtegn, før de passerer linjerne her-dokument til kommandoen. minustegn til omdirigeringsoperatøren <<- , får alle førende fanebetegn til at blive ignoreret. Dette giver dig mulighed for at bruge indrykk, når du skriver her-dokumenter i shell-scripts. Leading whitespace-tegn er ikke tilladt, kun fanen.
    Blokeret her-dokument kan indeholde strenge, variabler, kommandoer og enhver anden type input. Den sidste linje slutter med afgrænsningsidentifikatoren. Hvidt rum foran afgrænseren er ikke tilladt.

Grundlæggende Heredoc-eksempler

I dette afsnit vil vi se på nogle grundlæggende eksempler på, hvordan man bruger heredoc.

Heredoc bruges ofte i kombination med kattekommandoen.

I det følgende eksempel passerer vi to linjer med tekst, der indeholder en miljøvariabel og en kommando til cat ved hjælp af et her-dokument.

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

Som du kan se fra output nedenfor, er både variablen og kommandooutputen erstattet:

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

Lad os se, hvad der vil ske, hvis vi vedlægger afgrænseren i enkelt eller dobbelt citater.

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

Du kan bemærke, at når afgrænseren citeres, udføres ingen parameterudvidelse og kommandosubstitution af shell.

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 at vise output på skærmen kan du omdirigere den til en fil ved hjælp af operatørerne > , >> .

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

Hvis file.txt ikke findes, oprettes den. Når du bruger > vil filen blive overskrevet, mens >> tilføjer output til filen.

Heredoc-input kan også ledes. I det følgende eksempel erstatter sed kommandoen alle forekomster af l tegnet med e :

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

Heeeo Wored

Sådan skriver du pipedataene til en fil:

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

Brug af Heredoc med SSH

Brug af Heredoc er en af ​​de mest praktiske og nemmeste måder at udføre flere kommandoer på et fjernsystem over SSH.

Når du bruger ikke-citeret afgrænser, skal du sørge for at undslippe alle variabler, kommandoer og specialtegn, ellers interpoleres de 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

Du ønsker måske også at konfigurere en SSH-nøglebaseret godkendelse og oprette forbindelse til dine Linux-servere uden at indtaste et kodeord.

Konklusion

I denne vejledning har du lært, hvad der er heredoc og hvordan du bruger det i dine shell-scripts.

bash terminal