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 (<<) atẹle nipa aami iyasọtọ. Aami ami iyasọtọ kanna ni yoo lo lati fopin si iwe-aṣẹ koodu naa. Ohunkohun ti o ba wa laarin olupin naa ni a ṣe akiyesi bi bulọọki koodu kan.

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.