Hvernig á að nota Heredoc í Shell Scripting
Hér skjal (Heredoc) er inntak eða skráarstraumur bókstaflega sem er meðhöndlað sem sérstakur kóðablokk. Þessi kóðablokk verður send til skipunar til vinnslu. Heredoc er upprunnið í UNIX skeljum og er að finna í vinsælum Linux skeljum eins og sh, tcsh, ksh, bash, zsh, csh. Einkum styðja önnur forritunarmál eins og Perl, Ruby, PHP einnig heredoc.
Uppbygging Herdoc
Heredoc notar 2 hornklofa (<<)
á eftir með afmörkunarmerki. Sami afmörkunartákn verður notaður til að loka kóðablokkinni. Hvað sem kemur innan afmörkunar er talið vera kóðablokk.
Skoðaðu dæmið hér að neðan. Ég er að beina kóðablokkinni yfir í cat skipunina. Hér er afmörkunin stillt á „BLOCK“ og hætt með sama „LOCK“.
cat << BLOCK Hello world Today date is $(date +%F) My home directory = ${HOME} BLOCK
ATHUGIÐ: Þú ættir að nota sama afmörkunartáknið til að hefja blokkina og binda enda á blokkina.
Búðu til marglínu athugasemdir
Ef þú ert að kóða einhvern tíma í bash núna, gætirðu vitað að bash styður sjálfgefið ekki marglínu athugasemdir eins og C eða Java. Þú getur notað HereDoc til að sigrast á þessu.
Þetta er ekki innbyggður eiginleiki bash sem styður marglínu athugasemd, heldur bara hakk. Ef þú ert ekki að beina heredoc í neina skipun mun túlkurinn einfaldlega lesa kóðablokkinn og ekki framkvæma neitt.
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
Meðhöndlun hvítra rýma
Sjálfgefið, heredoc mun ekki bæla neina hvíta stafina (flipa, bil). Við getum hnekið þessari hegðun með því að bæta strik (-)
á eftir (<<)
og síðan afmarka. Þetta mun bæla niður öll flipabil en hvít bil verða ekki bæld niður.
cat <<- BLOCK This line has no whitespace. This line has 2 white spaces at the beginning. This line has a single tab. This line has 2 tabs. This line has 3 tabs. BLOCK
Variable og Command Substitution
Heredoc samþykkir breytileg skipti. Breytur geta verið notendaskilgreindar breytur eða umhverfisbreytur.
TODAY=$(date +%F) cat << BLOCK1 # User defined variables Today date is = ${TODAY} #Environ Variables I am running as = ${USER} My home dir is = ${HOME} I am using ${SHELL} as my shell BLOCK1
Á sama hátt geturðu keyrt hvaða skipanir sem er inni í heredoc kóðablokkinni.
cat << BLOCK2 $(uname -a) BLOCK2
Að flýja sérstafi
Það eru nokkrar leiðir til að flýja sérstafi. Annaðhvort geturðu gert það á persónustigi eða doc stigi.
Notaðu skástrik (\) til að sleppa við einstaka sérstafi.
cat << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = ${TODAY} BLOCK5
Til að sleppa undan öllum sértáknum inni í kubbnum skaltu umkringja afmörkunina með stökum gæsalappir, tvöfaldar gæsalappir eða forskeyti afmarka með skástrik.
cat << 'BLOCK1' I am running as = ${USER} BLOCK1 cat << "BLOCK2" I am running as = ${USER} BLOCK2 cat << \BLOCK3 I am running as = ${USER} BLOCK3
Nú þegar við þekkjum uppbyggingu heredoc og hvernig það virkar skulum við sjá nokkur dæmi. Tvö algeng svæði þar sem ég nota heredoc eru að keyra blokk af skipunum yfir SSH og senda SQL fyrirspurnir í gegnum heredoc.
Í dæminu hér að neðan erum við að reyna að keyra kóðablokk á ytri netþjóni í gegnum SSH.
Í dæminu hér að neðan sendi ég valyfirlýsingu til psql til að tengjast gagnagrunni og keyra fyrirspurnina. Þetta er önnur leið til að keyra fyrirspurn í psql inni í bash skriftu í stað þess að nota -f
fánann til að keyra .sql skrá.
#!/usr/bin/env bash UNAME=postgres DBNAME=testing psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK
Það er það fyrir þessa grein. Það er miklu meira sem þú getur gert með heredoc miðað við það sem við höfum sýnt í dæmunum. Ef þú ert með eitthvað gagnlegt hakk með heredoc vinsamlegast settu það í athugasemdareitinn svo lesendur okkar gætu notið góðs af því.