آموزش اسکریپت نویسی لینوکس (Heredocها و Herestringها)
آموزش اسکریپت نویسی لینوکس (Heredocها و Herestringها)
گاهی نگهداری دادهها در یک فایل superfluous (زائد) است. ممکن است فقط مقدار بسیار کمی داشته باشیم.
یا ممکن است خواسته باشیم محتوای متغیری را، بدون آنکه اول آن را در یک فایل بنویسیم، به یک دستور تغییر مسیر بدهیم.
grep proud <<END $
.I am a proud sentence <
END <
.I am a proud sentence
این یک Heredoc میباشد.
آموزش اسکریپت نویسی
وقتی میخواهید یک قطعه کوچک چند سطری دادهها را در اسکریپت خود تعبیه کنید Heredocها سودمند هستند.
(تعبیه قطعات بزرگ تکنیک نامناسبی است. شما باید منطق خود (کد خودتان) و ورودی خود (دادههایتان) را جداگانه و ترجیحاً در فایل های مختلف نگاه دارید، مگر اینکه دادهها جزئی باشند).
در یک Heredoc، کلمهای برای ایفای نقش نگهبان انتخاب میکنیم.
هر کلمهای میتواند باشد، ما از END در این مثال استفاده کردهایم.
کلمهای انتخاب کنید، که در مجموعه دادهای شما ظاهر نمیشود.
تمام سطرهایی که پس از اولین نمونه نگهبان تا رسیدن به دومین نمونه آمدهاند، برای دستور stdin میشوند.
دومین نمونه نگهبان، باید خودش یک سطر کامل باشد.
چند مورد متمایز برای Heredocها وجود دارد.
به طور معمول، نمیتوانید آنها را دندانهدار کنید، همه فاصلههایی که در اینجا برای دندانهدار کردن اسکریپت به کار ببرید در stdin ظاهر خواهند شد.
رشته پایان دهنده (در مثال ما END) باید در ابتدای سطر باشد.
میتوانید با حذف موقتی توگذاری برای سطرهای Heredocهای خود، از این مطلب اجتناب کنید.
به هر حال، موجب بدشکل شدن تورفتگی شکیل و زیبای شما میگردد.
یک جایگزین وجود دارد، اگر از <<-END به جای <<END به عنوان عملگر Heredoc خود استفاده کنید،
BASH همه کاراکترهای tab در ابتدای هر سطر از محتوای Heredoc شما را قبل از ارسال به دستور حذف میکند.
به این ترتیب باز هم میتوانید از tab ها (اما از فاصله خیر) برای توگذاری محتوای Heredoc خود با بقیه کد استفاده کنید.
آن tab ها برای فرمانی که Heredoc شما را دریافت میکند، ارسال نخواهند شد.
همچنین میتوانید tabها را برای توگذاری رشته نگهبان هم به کار ببرید.
به طور پیشفرض، جایگزینیهای BASH در محتوای Heredoc انجام میشود.
هر چند، اگر کلمهای که برای جدا کردن Heredoc خود به کار میبرید را نقلقولی نمایید، BASH هیچگونه جایگزینی در محتویات انجام نخواهد داد.
برای دیدن تفاوت، این مثال را با و بدون کاراکترهای نقلقول امتحان کنید:
این دفعه، stdin مستقیماً اطلاعاتش را از رشتهای که پس از عملگر <<< قرار دادهاید، میخواند.
این برای ارسال اطلاعات داخل متغیرها، به پردازشها خیلی مناسب است:
“.grep proud <<<“$USER sits proudly on his throne in $HOSTNAME $
.hamin sits proudly on his throne in faraznetwork
Herestringها کوتاهتر، کمتر مزاحم، و به طور کلی مناسبتر از Heredocهای حجیم همتای خود میباشند.
گرچه آنها قابل حمل به پوسته Bourne نیستند.
بعداً، شما در باره لولهها و اینکه چطور میتوانند برای ارسال خروجی یک دستور به stdin دستور دیگر به کار بروند، خواهید آموخت.
افراد بسیاری برای ارسال خروجی یک متغیر به عنوان stdin برای یک فرمان، از لولهها استفاده میکنند.
گرچه، برای این مقصود Herestringها باید ترجیح داده شوند.
آنها پوسته فرعی ایجاد نمیکنند و برای پوسته و هم برای سبک نگارش اسکریپت پوسته شما روشنتر هستند:
جهت مشاهده دوره های آموزشی بر روی این لینک کلیک نمایید.
جدیدترین اخبار مجموعه فراز نتورک را در این صفحه اجتماعی دنبال کنید.
نویسنده: موسی رشوند
دیدگاهتان را بنویسید
برای نوشتن دیدگاه باید وارد بشوید.