Kaip naudoti „Heredoc“ scenarijų scenarijuose
Čia dokumentas (Heredoc) yra įvesties arba failų srauto pažodinis žodis, kuris laikomas specialiu kodo bloku. Šis kodo blokas bus perduotas komandai apdoroti. „Heredoc“ yra kilęs iš UNIX kriauklių ir jį galima rasti populiariuose „Linux“ kriauklėse, pvz., Sh, tcsh, ksh, bash, zsh, csh. Pažymėtina, kad kitos programavimo kalbos, tokios kaip Perl, Ruby, PHP, taip pat palaiko heredoc.
Herdoc struktūra
„Heredoc“ naudoja 2 kampinius skliaustus (<<)
, po kurių yra skiriamojo ženklo. Tas pats atribotuvo žetonas bus naudojamas kodo blokui nutraukti. Viskas, kas patenka į ribotuvą, laikoma kodo bloku.
Pažvelkite į žemiau pateiktą pavyzdį. Peradresuoju kodo bloką į katės komandą. Čia skyriklis nustatomas kaip „BLOCK“ ir baigiamas tuo pačiu „BLOCK“.
cat << BLOCK Hello world Today date is $(date +%F) My home directory = ${HOME} BLOCK
PASTABA: Norėdami pradėti bloką ir jį nutraukti, turėtumėte naudoti tą patį atribotuvo prieigos raktą.
Kurti kelių eilių komentarus
Jei dabar koduojate kažkada „bash“, galite žinoti, kad „bash“ pagal numatytuosius nustatymus nepalaiko kelių eilių komentarų, tokių kaip „C“ ar „Java“. Norėdami tai įveikti, galite naudoti „HereDoc“.
Tai nėra įmontuota „bash“ funkcija, palaikanti kelių eilučių komentarus, o tiesiog nulaužimas. Jei nenukreipiate heredoc į jokią komandą, vertėjas paprasčiausiai perskaitys kodo bloką ir nieko nevykdys.
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
Baltųjų erdvių tvarkymas
Pagal numatytuosius nustatymus „heredoc“ nenuslopins jokių tarpų (skirtukų, tarpų). Mes galime nepaisyti šios elgsenos pridėdami brūkšnį (-)
po (<<)
, po kurio yra skiriamasis ženklas. Tai panaikins visus skirtukų tarpus, bet tarpai nebus užgniaužti.
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
Kintamasis ir komandinis pakeitimas
Heredoc priima kintamą pakaitalą. Kintamieji gali būti vartotojo apibrėžti kintamieji arba aplinkos kintamieji.
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
Panašiai galite paleisti visas komandas „heredoc“ kodo bloke.
cat << BLOCK2 $(uname -a) BLOCK2
Pabėgimas nuo specialiųjų personažų
Yra keli būdai, kaip galime išvengti specialiųjų personažų. Arba galite tai padaryti simbolių lygiu arba dokumento lygiu.
Norėdami pabėgti nuo atskirų specialiųjų simbolių, naudokite atgalinį brūkšnį (\).
cat << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = ${TODAY} BLOCK5
Norėdami išvengti visų specialių simbolių, esančių bloke, apjuoskite skyriklį vienomis kabutėmis, dvigubomis kabutėmis arba priešdėlinį skiriamąjį ženklą atgaliniu brūkšniu.
cat << 'BLOCK1' I am running as = ${USER} BLOCK1 cat << "BLOCK2" I am running as = ${USER} BLOCK2 cat << \BLOCK3 I am running as = ${USER} BLOCK3
Dabar, kai žinome heredoko struktūrą ir kaip jis veikia, pažiūrėkime keletą pavyzdžių. Dvi bendrosios sritys, kuriose naudoju heredoc, paleidžia komandų bloką per SSH ir perduoda SQL užklausas per heredoc.
Žemiau pateiktame pavyzdyje mes bandome atlikti kodo bloką nuotoliniame serveryje per SSH.
Žemiau pateiktame pavyzdyje perduodu pasirinktą sakinį psql prisijungti prie duomenų bazės ir vykdyti užklausą. Tai yra alternatyvus būdas vykdyti užklausą psql viduje „bash“ scenarijuje, užuot naudojus žymę -f
.sql failui paleisti.
#!/usr/bin/env bash UNAME=postgres DBNAME=testing psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK
Tai šiam straipsniui. Su heredoku galite padaryti daug daugiau, palyginti su tuo, ką parodėme pavyzdžiuose. Jei turite kokių nors naudingų įsilaužimų su heredoc, prašome paskelbti juos komentarų skyriuje, kad mūsų skaitytojai galėtų tuo pasinaudoti.