Hogyan kell használni a Heredoc -t a Shell -szkriptekben

instagram story viewer

Itt a dokumentum (Heredoc) egy bemeneti vagy fájlfolyam -literál, amelyet speciális kódblokkként kezelnek. Ezt a kódblokkot továbbítja egy parancs feldolgozásra. Heredoc ben ered UNIX kagyló és megtalálható népszerű Linux shell -ek mint sh, tcsh, ksh, bash, zsh, csh. Nevezetesen, más programozási nyelvek, például a Perl, a Ruby, a PHP is támogatják a heredocot.

A Herdoc felépítése

Heredoc 2 szögtartót használ (<<) majd a elválasztó jelző. Ugyanezt a határoló tokent használjuk a kódblokk befejezésére. Bármi, ami a határolóba kerül, kódblokknak minősül.

Nézze meg az alábbi példát. Átirányítom a kódblokkot a macska parancs. Itt a határoló „BLOKK"És ugyanaz fejezi be"BLOKK“.

macska << BLOKK Hello world Ma a dátum $ (dátum +%F) Saját könyvtár = $ {HOME}
BLOKK

JEGYZET: Ugyanazt a határoló tokent kell használnia a blokk elindításához és a blokk befejezéséhez.

Többsoros megjegyzések létrehozása

Ha most bash -ban kódol, akkor tudhatja, hogy a bash alapértelmezés szerint nem támogatja a többsoros megjegyzéseket C vagy Jáva. Te tudod használni HereDoc ennek leküzdésére.

Ez nem a többsoros megjegyzéseket támogató bash beépített funkciója, hanem csak hackelés. Ha nem irányítja át heredoc Bármely parancshoz a tolmács egyszerűen leolvassa a kódblokkot, és nem hajt végre semmit.

<< MEGJEGYZÉS Ez a megjegyzés 1. sora Ez a 2. megjegyzés sor Ez a 3. megjegyzés sor. MEGJEGYZÉS
Többsoros megjegyzések
Többsoros megjegyzések

Fehér terek kezelése

Alapértelmezés szerint, heredoc nem nyomja el a szóközöket (tabulátorok, szóközök). Ezt a viselkedést felülírhatjuk a hozzáadásával gondolatjel (-) utána (<<) majd elválasztó. Ezzel elnyomja az összes tabulátor szóközt, de a fehér szóközöket nem.

macska <<- BLOKK. Ennek a sornak nincs szóköz. Ennek a sornak az elején 2 fehér szóköz van. Ez a sor egyetlen lappal rendelkezik. Ennek a sornak 2 lapja van. Ez a sor 3 fület tartalmaz. BLOKK. 
A terek kezelése
A terek kezelése

Változó és parancs helyettesítés

A Heredoc elfogadja a változó helyettesítést. A változók lehetnek felhasználó által definiált vagy környezeti változók.

MA = $ (dátum +%F) macska << BLOCK1. # Felhasználó által definiált változók. A mai dátum: $ {TODAY} #Environ változók. = $ {USER} néven futok Az otthoni dir = $ {HOME} $ {SHELL} -ot használok héjamként. BLOKK1.

Hasonlóképpen bármilyen parancsot futtathat a heredoc kódblokk.

macska << BLOKK2. $ (uname -a) BLOCK2. 
Változó és parancs helyettesítés
Változó és parancs helyettesítés

Menekülő különleges karakterek

Számos módon kerülhetjük el a különleges karaktereket. Ezt megteheti karakter vagy doku szinten is.

Az egyes speciális karakterek elkerüléséhez használja a fordított perjel (\).

macska << BLOKK4. $ (uname -a) BLOCK4 macska << BLOCK5. A mai dátum: $ {TODAY} TÖMB5.

Hogy elkerülje a blokkon belüli összes speciális karaktert, az idézőjelet idézőjelekkel, kettős idézőjelekkel vagy előtagú határolójelekkel és fordított perjelekkel veszi körül.

macska << 'BLOCK1' = $ {USER} néven futok BLOCK1 macska << "BLOCK2" = $ {USER} néven futok BLOCK2 macska << \ BLOCK3. = $ {USER} néven futok BLOKK3.
Menekülő különleges karakterek
Menekülő különleges karakterek

Most, hogy ismerjük a szerkezetét heredoc és hogyan működik, nézzünk néhány példát. Két közös terület, ahol használom heredoc vannak parancsblokk futtatása SSH -n és SQL lekérdezések átadása heredoc.

Az alábbi példában egy kódblokkot próbálunk végrehajtani egy távoli kiszolgálón SSH -n keresztül.

Parancsok futtatása SSH -n
Parancsok futtatása SSH -n

Az alábbi példában a válassza ki nyilatkozat psql hogy csatlakozzon egy adatbázishoz és futtassa a lekérdezést. Ez egy alternatív módja a lekérdezés futtatásának psql a bash szkript belsejében, a helyett -f zászló futni .sql fájlt.

#!/usr/bin/env bash UNAME = postgres. DBNAME = psql tesztelése -felhasználónév = $ {UNAME} -jelszó --dbname = $ {DBNAME} << BLOCK. SELECT * ORSZÁGOKBÓL. WHERE region_id = 4; BLOKK. 
SQL QUERY futtatása
SQL QUERY futtatása

Ennyi a cikkhez. Sokkal többet tud tenni heredoc ahhoz képest, amit a példákban mutattunk. Ha bármilyen hasznos csapkod van heredoc kérjük, tegye közzé a megjegyzés rovatban, hogy olvasóink profitálhassanak ebből.

Teachs.ru