Bii o ṣe le Lo Heredoc ni Ikarahun Ikarahun
Nibi iwe aṣẹ (Heredoc) jẹ ifawọle tabi gegebi ṣiṣan faili ti o tọju bi idena koodu pataki kan. Àkọsílẹ koodu yii yoo kọja si aṣẹ kan fun ṣiṣe. Heredoc ti ipilẹṣẹ ninu awọn ibon nlanla UNIX ati pe o le rii ni awọn ẹja Linux ti o gbajumọ bii sh, tcsh, ksh, bash, zsh, csh. Paapaa, awọn ede siseto miiran bi Perl, Ruby, PHP tun ṣe atilẹyin heredoc.
Igbekale ti Herdoc
Heredoc nlo awọn biraketi igun meji 2
Wo apẹẹrẹ ni isalẹ. Mo n ṣe atunṣe bulọọki koodu si aṣẹ ologbo. Nibi ti ṣeto onidasi si “BLOCK” ati fopin si nipasẹ “BLOCK” kanna.
cat << BLOCK Hello world Today date is $(date +%F) My home directory = ${HOME} BLOCK
AKIYESI: O yẹ ki o lo aami iyasilẹ kanna lati bẹrẹ bulọọki ki o fopin si bulọọki naa.
Ṣẹda Awọn asọye Multiline
Ti o ba n ṣe koodu ni igba diẹ ninu bash bayi, o le mọ bash nipasẹ aiyipada ko ṣe atilẹyin awọn asọye multiline bii C tabi Java. O le lo HereDoc lati bori eyi.
Eyi kii ṣe ẹya ti a ṣe sinu ti bash ṣe atilẹyin asọye ọpọlọpọ ila, ṣugbọn gige nikan. Ti o ko ba ṣe atunṣe heredoc si eyikeyi aṣẹ, onitumọ naa yoo ka kika iwe koodu naa kii yoo ṣe ohunkohun.
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
Mimu Awọn aaye White
Nipa aiyipada, heredoc kii yoo tẹ eyikeyi awọn ohun kikọ aaye aaye funfun mọlẹ (awọn taabu, awọn alafo). A le ṣe idojukoko ihuwasi yii nipa fifi dash (-)
lehin (<<)
atẹle nipa olula kan. Eyi yoo dinku gbogbo awọn aaye taabu ṣugbọn awọn aye funfun ko ni tẹmọlẹ.
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
Ayípadà ati stfin Substiution
Heredoc gba iyipada iyipada. Awọn oniyipada le jẹ awọn oniye-asọye olumulo tabi awọn oniyipada ayika.
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
Bakan naa, o le ṣiṣe eyikeyi awọn ofin inu apo-iwe koodu heredoc.
cat << BLOCK2 $(uname -a) BLOCK2
Sa ohun kikọ pataki
Awọn ọna pupọ lo wa ti a le sa fun awọn kikọ pataki. Boya o le ṣe ni ipele ohun kikọ tabi ipele doc.
Lati sa fun awọn kikọ pataki kọọkan lo ipadasẹhin (\).
cat << BLOCK4 $(uname -a) BLOCK4 cat << BLOCK5 Today date is = ${TODAY} BLOCK5
Lati sa fun gbogbo awọn ohun kikọ pataki inu apo-iwe yika agbegbe alapin pẹlu awọn agbasọ ẹyọkan, awọn agbasọ meji, tabi opin-tẹlẹ ṣaju pẹlu ifẹhinti pada.
cat << 'BLOCK1' I am running as = ${USER} BLOCK1 cat << "BLOCK2" I am running as = ${USER} BLOCK2 cat << \BLOCK3 I am running as = ${USER} BLOCK3
Nisisiyi ti a mọ ilana ti heredoc ati bi o ṣe n ṣiṣẹ, jẹ ki a wo awọn apẹẹrẹ diẹ. Awọn agbegbe meji ti o wọpọ nibiti Mo lo heredoc n ṣiṣẹ ni bulọọki awọn aṣẹ lori SSH ati gbigbe awọn ibeere SQL kọja nipasẹ heredoc.
Ninu apẹẹrẹ ti o wa ni isalẹ, a n gbiyanju lati ṣiṣẹ Àkọsílẹ koodu kan ninu olupin latọna jijin nipasẹ SSH.
Ninu apẹẹrẹ isalẹ Mo n kọja alaye yiyan si psql lati sopọ si ibi ipamọ data kan ati ṣiṣe ibeere naa. Eyi jẹ ọna miiran lati ṣiṣe ibeere ni psql inu iwe afọwọkọ bash dipo lilo asia -f
lati ṣiṣe faili .sql.
#!/usr/bin/env bash UNAME=postgres DBNAME=testing psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK SELECT * FROM COUNTRIES WHERE region_id = 4; BLOCK
Iyẹn ni fun nkan yii. Pupo diẹ sii ti o le ṣe pẹlu heredoc ni akawe si ohun ti a ti fihan ninu awọn apẹẹrẹ. Ti o ba ni gige gige ti o wulo pẹlu heredoc jọwọ firanṣẹ ni apakan asọye ki awọn onkawe wa le ni anfani lati eyi.