Yadda ake amfani da Heredoc a cikin rubutun Shell


Anan daftarin aiki (Heredoc) shigarwa ce ko madaidaiciyar fayil wacce aka kula da ita azaman keɓaɓɓen toshe na lambar. Wannan toshe lambar za a wuce zuwa umarni don aiki. Heredoc ya samo asali ne daga baƙon UNIX kuma ana iya samun sa a cikin sanannun bawo na Linux kamar sh, tcsh, ksh, bash, zsh, csh. Hakanan, sauran yarukan shirye-shirye kamar Perl, Ruby, PHP suma suna tallafawa heredoc.

Tsarin Herdoc

Heredoc yana amfani da ƙusoshin kusurwa 2 (<<) sannan alamar ƙa'ida. Za a yi amfani da alamar alamar iyaka don dakatar da toshe lambar. Duk abin da ya zo a cikin iyakance ana ɗaukar shi a matsayin toshe lambar.

Duba misalin da ke ƙasa. Ina tura hanyar toshe lambar zuwa umarnin kyanwa. Anan an saita mai iyakancewa zuwa "BLOCK" kuma an dakatar dashi ta hanyar "BLOCK" din.

cat << BLOCK
	Hello world
	Today date is $(date +%F)
	My home directory = ${HOME}
BLOCK

SAURARA: Yakamata kayi amfani da alamar alamar iyaka don fara toshewar da dakatar da toshewar.

Commentsirƙiri Sharhi na Multiline

Idan kuna yin lamba wani lokaci a cikin bash yanzu, ƙila ku sani bash ta tsohuwa baya tallafawa maganganun multiline kamar C ko Java. Kuna iya amfani da HereDoc don shawo kan wannan.

Wannan ba fasalin ginannen bash bane wanda yake tallafawa maganganun layuka da yawa, amma kawai haƙiƙa. Idan baku turawa heredoc zuwa kowane umarni ba, mai fassarar zai karanta kawai toshe lambar kuma ba zai aiwatar da komai ba.

<< COMMENT
	This is comment line 1
	This is comment line 2
	This is comment line 3
COMMENT

Karɓar Filayen Fari

Ta hanyar tsoho, heredoc ba zai murkushe duk wani farin harafin sarari ba (shafuka, sarari). Zamu iya shawo kan wannan ɗabi'ar ta hanyar ƙara dash (-) bayan (<<) sai kuma wani iyaka. Wannan zai danne duk wuraren tab amma ba za a murkushe fararen wurare ba.

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

Canji da Dokar Sauyawa

Heredoc ya yarda da sauya canji. Sauye-sauye na iya zama ƙayyadaddun masu amfani ko masu canjin yanayi.

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

Hakanan, zaku iya gudanar da kowane umarni a cikin toshe lambar heredoc.

cat << BLOCK2
$(uname -a) 
BLOCK2

Tserewa Masu Musamman

Akwai hanyoyi da yawa da zamu iya tserewa haruffa na musamman. Ko dai zaka iya yi a matakin hali ko matakin doc.

Don tserewa halaye na musamman na mutum amfani da juyawar baya (\).

cat << BLOCK4
$(uname -a)
BLOCK4

cat << BLOCK5
Today date is = ${TODAY}
BLOCK5

Don tserewa duk wasu haruffa na musamman a cikin toshe suna kewaye da iyakancin tare da maganganu guda ɗaya, maganganu biyu, ko prefix delimiter tare da juya baya.

cat << 'BLOCK1'
I am running as = ${USER}
BLOCK1

cat << "BLOCK2"
I am running as = ${USER}
BLOCK2

cat << \BLOCK3
I am running as = ${USER}
BLOCK3

Yanzu da yake mun san tsarin heredoc da yadda yake aiki, bari mu ga examplesan misalai. Yankuna guda biyu na gama gari wanda nake amfani da heredoc suna tafiyar da wani tsari na umarni akan SSH da wucewar tambayoyin SQL ta hanyar heredoc.

A cikin misalin da ke ƙasa, muna ƙoƙarin aiwatar da toshe lambar lamba a cikin sabar ta hanyar SSH.

A cikin misalin da ke ƙasa ina wucewa da zaɓin bayani zuwa psql don haɗi zuwa bayanan bayanai da gudanar da tambayar. Wannan wata hanyace madadin don gudanar da tambaya a cikin psql a cikin rubutun bash maimakon amfani da tutar -f don gudanar da fayil .sql.

#!/usr/bin/env bash

UNAME=postgres
DBNAME=testing

psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK
SELECT * FROM COUNTRIES
WHERE region_id = 4;
BLOCK

Shi ke nan ga wannan labarin. Akwai abubuwa da yawa da zaku iya yi tare da heredoc idan aka kwatanta da abin da muka nuna a cikin misalai. Idan kuna da wani ɗan amfani mai amfani tare da heredoc don Allah sanya shi a cikin ɓangaren sharhi don masu karatu su iya amfana da hakan.