Jinsi ya kutumia Heredoc katika Maandishi ya Shell
Hapa hati ( Heredoc) ni pembejeo au mtiririko wa faili halisi ambao unachukuliwa kama kizuizi maalum cha msimbo. Kizuizi hiki cha nambari kitapitishwa kwa amri ya kuchakatwa. Heredoc asili ya makombora ya UNIX na inaweza kupatikana katika makombora maarufu ya Linux kama sh, tcsh, ksh, bash, zsh, csh. Hasa, lugha zingine za programu kama Perl, Ruby, PHP pia zinaunga mkono heredoc.
Muundo wa Herdoc
Heredoc hutumia mabano 2 ya pembe (<<)
ikifuatiwa na tokeni ya kuweka mipaka. Tokeni sawa ya kuweka mipaka itatumika kukomesha kizuizi cha msimbo. Chochote kinachokuja ndani ya kikomo kinachukuliwa kuwa kizuizi cha nambari.
Tazama mfano hapa chini. Ninaelekeza kizuizi cha nambari kwa amri ya paka. Hapa delimiter imewekwa KUZUIA na kusitishwa na KUZUIA sawa.
cat << BLOCK Hello world Today date is $(date +%F) My home directory = ${HOME} BLOCK
KUMBUKA: Unapaswa kutumia tokeni sawa ya kuweka kikomo ili kuanza kizuizi na kusitisha kizuizi.
Unda Maoni ya Mistari mingi
Ikiwa unaandika wakati fulani katika bash sasa, unaweza kujua bash kwa chaguo-msingi haiauni maoni ya mitandao mingi kama C au Java. Unaweza kutumia HereDoc kushinda hii.
Hiki si kipengele kilichojengewa ndani cha bash kinachounga mkono maoni ya mistari mingi, lakini ni udukuzi tu. Ikiwa hauelekezi tena heredoc kwa amri yoyote, mkalimani atasoma tu kizuizi cha nambari na hatatekeleza chochote.
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
Kushughulikia Nafasi Nyeupe
Kwa chaguo-msingi, heredoc haitakandamiza herufi zozote za nafasi nyeupe (tabo, nafasi). Tunaweza kubatilisha tabia hii kwa kuongeza dashi (-)
baada ya (<<)
ikifuatiwa na kikomo. Hii itakandamiza nafasi zote za vichupo lakini nafasi nyeupe hazitakandamizwa.
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
Tofauti na Amri Badala
Heredoc inakubali uingizwaji tofauti. Vigeu vinaweza kuwa vigeu vinavyofafanuliwa na mtumiaji au vigeu vya kimazingira.
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
Vile vile, unaweza kuendesha amri zozote ndani ya kizuizi cha msimbo wa heredoc.
cat << BLOCK2 $(uname -a) BLOCK2
Kuepuka Wahusika Maalum
Kuna njia kadhaa tunaweza kuepuka wahusika maalum. Unaweza kuifanya katika kiwango cha mhusika au kiwango cha hati.
Ili kuepuka herufi maalum za kibinafsi tumia backslash (\).
cat << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = ${TODAY} BLOCK5
Ili kuepuka herufi zote maalum ndani ya kizuizi, zunguka kitenganishi kwa nukuu moja, nukuu mbili, au kiambishi awali cha kutofautisha kwa kurudi nyuma.
cat << 'BLOCK1' I am running as = ${USER} BLOCK1 cat << "BLOCK2" I am running as = ${USER} BLOCK2 cat << \BLOCK3 I am running as = ${USER} BLOCK3
Sasa kwa kuwa tunajua muundo wa heredoc na jinsi inavyofanya kazi, hebu tuone mifano michache. Maeneo mawili ya kawaida ambapo mimi hutumia heredoc yanaendesha safu ya amri juu ya SSH na kupitisha maswali ya SQL kupitia heredoc.
Katika mfano ulio hapa chini, tunajaribu kutekeleza kizuizi cha msimbo katika seva ya mbali kupitia SSH.
Katika mfano hapa chini ninapitisha taarifa iliyochaguliwa kwa psql kuunganishwa na hifadhidata na kuendesha hoja. Hii ni njia mbadala ya kutekeleza hoja katika psql ndani ya hati ya bash badala ya kutumia -f
bendera kuendesha faili ya .sql.
#!/usr/bin/env bash UNAME=postgres DBNAME=testing psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK
Hiyo ni kwa makala hii. Kuna mengi zaidi unaweza kufanya na heredoc ikilinganishwa na yale ambayo tumeonyesha katika mifano. Ikiwa una udukuzi wowote muhimu na heredoc tafadhali ichapishe kwenye sehemu ya maoni ili wasomaji wetu wanufaike na hilo.