এখানে নথি (Heredoc ) হল একটি ইনপুট বা ফাইল স্ট্রিম আক্ষরিক যা কোডের একটি বিশেষ ব্লক হিসাবে বিবেচিত হয়। কোডের এই ব্লক প্রক্রিয়াকরণের জন্য একটি কমান্ডে পাঠানো হবে। Heredoc UNIX-এ উৎপন্ন হয় শেল এবং জনপ্রিয় লিনাক্স শেল যেমন sh, tcsh, ksh, bash, zsh, csh পাওয়া যাবে। উল্লেখযোগ্যভাবে, অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজ যেমন পার্ল, রুবি, পিএইচপিও হেরেডোক সমর্থন করে।
Herdoc এর গঠন
Heredoc 2টি কোণ বন্ধনী (<<) ব্যবহার করে একটি ডিলিমিটার টোকেন অনুসরণ করে৷ . একই ডিলিমিটার টোকেন কোড ব্লক বন্ধ করতে ব্যবহার করা হবে। ডিলিমিটারের মধ্যে যা আসে তা কোডের ব্লক হিসাবে বিবেচিত হয়।
নীচের উদাহরণ তাকান. আমি কোডের ব্লকটিকে cat কমান্ডে পুনঃনির্দেশ করছি। এখানে ডিলিমিটার সেট করা আছে “BLOCK ” এবং একই “BLOCK দ্বারা সমাপ্ত "।
cat << BLOCK
Hello world
Today date is $(date +%F)
My home directory = ${HOME}
BLOCK
দ্রষ্টব্য :ব্লক শুরু করতে এবং ব্লকটি বন্ধ করতে আপনার একই ডিলিমিটার টোকেন ব্যবহার করা উচিত।
মাল্টিলাইন মন্তব্য তৈরি করুন
আপনি যদি এখন ব্যাশে কোডিং করেন তবে আপনি হয়তো জানেন যে ডিফল্টরূপে ব্যাশ C এর মত মাল্টিলাইন মন্তব্য সমর্থন করে না অথবা জাভা . আপনি HereDoc ব্যবহার করতে পারেন এটা কাটিয়ে ওঠার জন্য।
এটি মাল্টি-লাইন মন্তব্য সমর্থনকারী ব্যাশের অন্তর্নির্মিত বৈশিষ্ট্য নয়, তবে কেবল একটি হ্যাক। আপনি যদি heredoc পুনঃনির্দেশ না করেন যেকোনো কমান্ডে, দোভাষী কেবল কোডের ব্লক পড়বে এবং কিছু কার্যকর করবে না।
<< COMMENT This is comment line 1 This is comment line 2 This is comment line 3 COMMENT
হোয়াইট স্পেস হ্যান্ডলিং
ডিফল্টরূপে, heredoc কোন সাদা স্পেস অক্ষর (ট্যাব, স্পেস) দমন করবে না। আমরা dash (-) যোগ করে এই আচরণটি ওভাররাইড করতে পারি (<<) এর পরে একটি বিভেদক দ্বারা অনুসরণ করা হয়. এটি সমস্ত ট্যাব স্পেস দমন করবে কিন্তু সাদা স্পেস দমন করা হবে না৷
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
৷
ভেরিয়েবল এবং কমান্ড প্রতিস্থাপন
Heredoc পরিবর্তনশীল প্রতিস্থাপন গ্রহণ করে। ভেরিয়েবল ব্যবহারকারী-সংজ্ঞায়িত ভেরিয়েবল বা পরিবেশগত ভেরিয়েবল হতে পারে।
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
একইভাবে, আপনি heredoc-এর ভিতরে যেকোনো কমান্ড চালাতে পারেন কোড ব্লক।
cat << BLOCK2 $(uname -a) BLOCK2
বিশেষ অক্ষর পালানো
আমরা বিশেষ অক্ষর এড়াতে পারেন বিভিন্ন উপায় আছে. হয় আপনি এটি অক্ষর স্তরে বা ডক স্তরে করতে পারেন৷
৷পৃথক বিশেষ অক্ষর এড়াতে একটি ব্যাকস্ল্যাশ (\) ব্যবহার করুন .
cat << BLOCK4
$(uname -a)
BLOCK4
cat << BLOCK5
Today date is = ${TODAY}
BLOCK5
ব্লকের অভ্যন্তরে সমস্ত বিশেষ অক্ষর এড়ানোর জন্য একক উদ্ধৃতি, দ্বিগুণ উদ্ধৃতি, বা ব্যাকস্ল্যাশ সহ উপসর্গ ডিলিমিটারকে ঘিরে রাখুন৷
cat << 'BLOCK1'
I am running as = ${USER}
BLOCK1
cat << "BLOCK2"
I am running as = ${USER}
BLOCK2
cat << \BLOCK3
I am running as = ${USER}
BLOCK3
এখন যেহেতু আমরা heredoc এর গঠন জানি এবং এটি কিভাবে কাজ করে, আসুন কয়েকটি উদাহরণ দেখি। দুটি সাধারণ এলাকা যেখানে আমি heredoc ব্যবহার করি SSH-এর উপর কমান্ডের একটি ব্লক চালাচ্ছে এবং heredoc-এর মাধ্যমে SQL কোয়েরি পাস করছে .
নীচের উদাহরণে, আমরা SSH এর মাধ্যমে দূরবর্তী সার্ভারে কোডের একটি ব্লক কার্যকর করার চেষ্টা করছি৷
নীচের উদাহরণে আমি একটি নির্বাচন করছি psql-এ বিবৃতি একটি ডাটাবেসের সাথে সংযোগ করতে এবং ক্যোয়ারী চালাতে। এটি psql-এ একটি প্রশ্ন চালানোর একটি বিকল্প উপায় -f ব্যবহার করার পরিবর্তে ব্যাশ স্ক্রিপ্টের ভিতরে .sql চালানোর জন্য পতাকা ফাইল।
#!/usr/bin/env bash
UNAME=postgres
DBNAME=testing
psql --username=${UNAME} --password --dbname=${DBNAME} << BLOCK
SELECT * FROM COUNTRIES
WHERE region_id = 4;
BLOCK
এই নিবন্ধের জন্য এটি। heredoc এর সাথে আপনি আরও অনেক কিছু করতে পারেন৷ আমরা উদাহরণে দেখানো হয়েছে কি তুলনায়. আপনার যদি heredoc এর সাথে কোন দরকারী হ্যাক থাকে অনুগ্রহ করে মন্তব্য বিভাগে এটি পোস্ট করুন যাতে আমাদের পাঠকরা এটি থেকে উপকৃত হতে পারেন।