Kif tuża Heredoc fi Shell Scripting
Hawnhekk id-dokument (Heredoc) huwa input jew fluss ta 'fajl litterali li huwa ttrattat bħala blokk speċjali ta' kodiċi. Din il-blokka ta' kodiċi se tiġi mgħoddija lil kmand għall-ipproċessar. Heredoc joriġina minn qxur UNIX u jista 'jinstab f'qxur Linux popolari bħal sh, tcsh, ksh, bash, zsh, csh. Notevolment, lingwi ta 'programmar oħra bħal Perl, Ruby, PHP jappoġġjaw ukoll heredoc.
Struttura ta' Herdoc
Heredoc juża 2 parentesi angolari (<<)
segwiti minn token delimitatur. L-istess token delimitatur se jintuża biex itemm il-blokk tal-kodiċi. Kwalunkwe li jidħol fid-delimitatur huwa meqjus bħala blokk ta 'kodiċi.
Ħares lejn l-eżempju hawn taħt. Qed nidderieġi l-blokk tal-kodiċi għall-kmand tal-qtates. Hawnhekk id-delimitatur huwa ssettjat għal BLOCK u mitmum bl-istess BLOCK.
cat << BLOCK Hello world Today date is $(date +%F) My home directory = ${HOME} BLOCK
NOTA: Għandek tuża l-istess token delimitatur biex tibda l-blokk u ttemm il-blokk.
Oħloq Kummenti Multiline
Jekk qed tikkodifika f'xi żmien f'bash issa, tista 'tkun taf li bash awtomatikament ma jappoġġjax kummenti b'ħafna linji bħal C jew Java. Tista' tuża HereDoc biex tegħleb dan.
Din mhix karatteristika integrata ta 'bash li tappoġġja kumment b'ħafna linji, iżda biss hack. Jekk m'intix qed tidderieġi heredoc għal xi kmand, l-interpretu sempliċement jaqra l-blokk tal-kodiċi u ma jesegwixxi xejn.
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
Immaniġġjar ta' Spazji Bojod
B'mod awtomatiku, heredoc ma jrażżan ebda karattri ta' spazju abjad (tabs, spazji). Nistgħu negħlbu din l-imġieba billi nżidu sing (-)
wara (<<)
segwit minn delimitatur. Dan se jrażżan l-ispazji tat-tab kollha iżda l-ispazji bojod mhux se jiġu mrażżna.
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
Varjabbli u Sostituzzjoni tal-Kmand
Heredoc jaċċetta sostituzzjoni varjabbli. Varjabbli jistgħu jkunu varjabbli definiti mill-utent jew varjabbli ambjentali.
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
Bl-istess mod, tista 'tmexxi kwalunkwe kmandi ġewwa l-blokka tal-kodiċi heredoc.
cat << BLOCK2 $(uname -a) BLOCK2
Jaħarbu Karattri Speċjali
Hemm diversi modi kif nistgħu naħarbu karattri speċjali. Jew tista 'tagħmel dan fil-livell ta' karattru jew livell ta 'dok.
Biex taħrab karattri speċjali individwali uża backslash (\).
cat << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = ${TODAY} BLOCK5
Biex taħrab il-karattri speċjali kollha ġewwa l-blokka, iddawru d-delimitatur bi kwotazzjonijiet singoli, kwotazzjonijiet doppji, jew delimitatur tal-prefiss b'backslash.
cat << 'BLOCK1' I am running as = ${USER} BLOCK1 cat << "BLOCK2" I am running as = ${USER} BLOCK2 cat << \BLOCK3 I am running as = ${USER} BLOCK3
Issa li nafu l-istruttura ta’ heredoc u kif taħdem, ejja naraw ftit eżempji. Żewġ oqsma komuni fejn nuża heredoc qed imexxu blokk ta 'kmandi fuq SSH u jgħaddu mistoqsijiet SQL permezz heredoc.
Fl-eżempju t'hawn taħt, qed nippruvaw noqogħdu nwettqu blokka ta 'kodiċi f'server remot permezz ta' SSH.
Fl-eżempju ta 'hawn taħt qed ngħaddi dikjarazzjoni ta' selezzjoni lil psql biex tikkonnettja ma 'database u tmexxi l-mistoqsija. Dan huwa mod alternattiv biex tmexxi mistoqsija f'psql ġewwa script bash minflok tuża l-marka -f
biex tmexxi fajl .sql.
#!/usr/bin/env bash UNAME=postgres DBNAME=testing psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK
Dak hu għal dan l-artikolu. Hemm ħafna aktar li tista 'tagħmel b'heredoc meta mqabbel ma' dak li wrejna fl-eżempji. Jekk għandek xi hack utli ma heredoc jekk jogħġbok ibgħatha fit-taqsima tal-kummenti sabiex il-qarrejja tagħna jkunu jistgħu jibbenefikaw minn dan.