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

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.

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.

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.

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.

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.

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.