షెల్ స్క్రిప్టింగ్uలో హెరెడాక్uను ఎలా ఉపయోగించాలి


ఇక్కడ పత్రం (హెరెడోక్) అనేది ఇన్పుట్ లేదా ఫైల్ స్ట్రీమ్ అక్షరాలా, ఇది కోడ్ యొక్క ప్రత్యేక బ్లాక్uగా పరిగణించబడుతుంది. కోడ్ యొక్క ఈ బ్లాక్ ప్రాసెసింగ్ కోసం ఒక ఆదేశానికి పంపబడుతుంది. హెరెడోక్ యునిక్స్ షెల్స్uలో ఉద్భవించింది మరియు ప్రసిద్ధ లైనక్స్ షెల్స్uలో sh, tcsh, ksh, bash, zsh, csh లో చూడవచ్చు. ముఖ్యంగా, పెర్ల్, రూబీ, పిహెచ్uపి వంటి ఇతర ప్రోగ్రామింగ్ భాషలు కూడా హెరిడోక్uకు మద్దతు ఇస్తాయి.

హెర్డోక్ నిర్మాణం

హెరెడోక్ 2 యాంగిల్ బ్రాకెట్లను ఉపయోగిస్తుంది <కోడ్> (<<) తరువాత డీలిమిటర్ టోకెన్. కోడ్ యొక్క బ్లాక్uను ముగించడానికి అదే డీలిమిటర్ టోకెన్ ఉపయోగించబడుతుంది. డీలిమిటర్uలోకి వచ్చేది కోడ్ యొక్క బ్లాక్uగా పరిగణించబడుతుంది.

క్రింద ఉన్న ఉదాహరణ చూడండి. నేను కోడ్ యొక్క బ్లాక్uను పిల్లి ఆదేశానికి మళ్ళిస్తున్నాను. ఇక్కడ డీలిమిటర్ “బ్లాక్” కు సెట్ చేయబడింది మరియు అదే “బ్లాక్” చేత ముగించబడుతుంది.

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

గమనిక: బ్లాక్uను ప్రారంభించడానికి మరియు బ్లాక్uను ముగించడానికి మీరు అదే డీలిమిటర్ టోకెన్uను ఉపయోగించాలి.

మల్టీలైన్ వ్యాఖ్యలను సృష్టించండి

మీరు ఇప్పుడు ఎప్పుడైనా బాష్uలో కోడింగ్ చేస్తుంటే, సి లేదా జావా వంటి బహుళ వ్యాఖ్యలకు డిఫాల్ట్uగా బాష్ మద్దతు ఇవ్వదని మీకు తెలుసు. దీన్ని అధిగమించడానికి మీరు హియర్uడాక్uను ఉపయోగించవచ్చు.

ఇది బహుళ-లైన్ వ్యాఖ్యకు మద్దతు ఇచ్చే బాష్ యొక్క అంతర్నిర్మిత లక్షణం కాదు, కానీ కేవలం హాక్. మీరు హెరెడోక్uను ఏదైనా ఆదేశానికి దారి మళ్లించకపోతే, వ్యాఖ్యాత కోడ్ యొక్క బ్లాక్uను చదువుతుంది మరియు ఏదైనా అమలు చేయదు.

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

తెల్లని ప్రదేశాలను నిర్వహించడం

అప్రమేయంగా, హెరిడోక్ ఏ వైట్ స్పేస్ అక్షరాలను (ట్యాబ్uలు, ఖాళీలు) అణచివేయదు. (<<) తరువాత డీలిమిటర్ తరువాత డాష్ (-) ను జోడించడం ద్వారా మేము ఈ ప్రవర్తనను భర్తీ చేయవచ్చు. ఇది అన్ని టాబ్ ఖాళీలను అణిచివేస్తుంది కాని తెల్లని ఖాళీలు అణచివేయబడవు.

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

వేరియబుల్ మరియు కమాండ్ సబ్uస్టిట్యూషన్

హెరిడోక్ వేరియబుల్ ప్రత్యామ్నాయాన్ని అంగీకరిస్తుంది. వేరియబుల్స్ వినియోగదారు నిర్వచించిన వేరియబుల్స్ లేదా ఎన్విరాన్మెంటల్ వేరియబుల్స్ కావచ్చు.

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

అదేవిధంగా, మీరు హెరెడోక్ కోడ్ బ్లాక్ లోపల ఏదైనా ఆదేశాలను అమలు చేయవచ్చు.

cat << BLOCK2
$(uname -a) 
BLOCK2

ప్రత్యేక అక్షరాలను తప్పించుకోవడం

మేము ప్రత్యేక పాత్రల నుండి తప్పించుకోవడానికి అనేక మార్గాలు ఉన్నాయి. గాని మీరు దీన్ని అక్షర స్థాయిలో లేదా పత్రం స్థాయిలో చేయవచ్చు.

వ్యక్తిగత ప్రత్యేక అక్షరాల నుండి తప్పించుకోవడానికి బ్యాక్uస్లాష్ (\) ఉపయోగించండి.

cat << BLOCK4
$(uname -a)
BLOCK4

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

బ్లాక్ లోపల ఉన్న అన్ని ప్రత్యేక అక్షరాల నుండి తప్పించుకోవడానికి డీలిమిటర్uను ఒకే కోట్స్, డబుల్ కోట్స్ లేదా బ్యాక్uస్లాష్uతో ఉపసర్గ డీలిమిటర్uతో చుట్టుముట్టాలి.

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

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

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

హెరెడోక్ యొక్క నిర్మాణం మరియు ఇది ఎలా పనిచేస్తుందో ఇప్పుడు మనకు తెలుసు, కొన్ని ఉదాహరణలు చూద్దాం. నేను హెరెడోక్ ఉపయోగించే రెండు సాధారణ ప్రాంతాలు SSH పై ఆదేశాల బ్లాక్uను నడుపుతున్నాయి మరియు SQL ప్రశ్నలను హెరెడోక్ ద్వారా పంపుతున్నాయి.

దిగువ ఉదాహరణలో, మేము SSH ద్వారా రిమోట్ సర్వర్uలో కోడ్ యొక్క బ్లాక్uను అమలు చేయడానికి ప్రయత్నిస్తున్నాము.

దిగువ ఉదాహరణలో నేను ఒక డేటాబేస్కు కనెక్ట్ అవ్వడానికి మరియు ప్రశ్నను అమలు చేయడానికి psql కు ఎంచుకున్న స్టేట్మెంట్ను పంపుతున్నాను. .Sql ఫైల్uను అమలు చేయడానికి -f ఫ్లాగ్uను ఉపయోగించకుండా బదులుగా బాష్ స్క్రిప్ట్ లోపల psql లో ప్రశ్నను అమలు చేయడానికి ఇది ప్రత్యామ్నాయ మార్గం.

#!/usr/bin/env bash

UNAME=postgres
DBNAME=testing

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

ఈ వ్యాసం కోసం అది. మేము ఉదాహరణలలో చూపించిన వాటితో పోలిస్తే మీరు హెరెడోక్uతో చేయగలిగేది చాలా ఉంది. మీకు హెరెడోక్uతో ఏదైనా ఉపయోగకరమైన హాక్ ఉంటే దయచేసి దాన్ని వ్యాఖ్య విభాగంలో పోస్ట్ చేయండి, తద్వారా మా పాఠకులు దాని నుండి ప్రయోజనం పొందవచ్చు.