فرمان yes یکی از دستورات مفید حین کار با ترمینال لینوکس و به خصوص حین اجرا کردن اسکریپتها در Terminal است. این فرمان در واقع عمل تأیید کردن یا نوشتن y در پاسخ به سوالات را انجام میدهد. دستور yes نه فقط در توزیعات مختلف Linux بلکه در ترمینال macOS نیز قابل استفاده است.
در ادامه به معرفی این دستور و کاربردهای آن در قالب مثالهای مختلف میپردازیم. با ما باشید.
آشنایی با فرمان yes در ترمینال لینوکس
دستور yes یکی از سادهترین دستوراتی است که میتوان در Linux و سیستم عاملهای مشابه Unix که نمونهی محبوب آن، مکاواس اپل است، استفاده کرد. این دستور به قدری ساده است که در سورس کد System 7 Unix فقط ۶ خط کد را شامل میشده است.
اما دستور yes دقیقاً چه کاری انجام میدهد؟
این دستور در سادهترین حالت معادل این است که تایپ کنید y و سپس کلید Enter را فشار دهید و همین کار را تکرار کنید! در واقع در پاسخ به سوالات تأییدگونه حین اجرا کردن دستورات مختلف، معمولاً دو پاسخ اصلی این است:
- حرف n و زدن Enter معادل رد کردن و گفتن No است.
- تایپ کردن y و زدن Enter معادل تأیید کردن یا گفتن Yes است.
بنابراین اگر فرمان Yes را اجرا کنید، در هر خط از ترمینال یک حرف y را مشاهده خواهید کرد و این کار ادامه پیدا میکند تا زمانی که با زدن کلید میانبر Ctrl + C ترمینال را متوقف کنید.
نتیجه را بررسی کنید:
اگر بخواهید پیامی را در ترمینال مرتباً چاپ کرده و تکرار کنید، میتوانید دستور yes را بنویسید و پس از یک فاصله، پیام را بنویسید و در نهایت Enter را فشار دهید.
خروجی دستور فوق را ببینید:
و نحوهی چاپ کردن یک پیام چند کلمهای:
خروجی به این صورت است:
کاربرد yes حین اجرای اسکریپتها و برنامهنویسی
همانطور که اشاره کردیم در پاسخ به برخی سوالات، میبایست y یا n و Enter را فشار داد. بنابراین یک کاربرد مهم yes، در اجرا کردن اسکریپتهایی است که کاری را به صورت خودکار روی تعداد زیادی فایل و غیره انجام میدهند و هر بار برای تأیید، از کاربر سوال میشود. در ادامه چند مثال را بررسی میکنیم.
کاربرد yes در اسکریپتها
فرض کنید یک اسکریپت Bash به شکل زیر دارید:
این اسکریپت در صورت تأیید با زدن y، پیامی را چاپ میکند. در صورت زدن n نیز این کار را انجام نمیدهد. برای تست کردن فرمان yes، دستورات فوق را در یک فایل متنی ساده کپی کنید و با نام long_script.sh ذخیره کنید. در نهایت با استفاده از دستور chmod، اسکریپت را به حالت اجراشدنی تبدیل کنید:
اکنون با اجرا کردن فرمان زیر، اسکریپت اجرا میشود:
پس از اجرا کردن اسکریپت، برای چاپ شدن متن میبایست y و Enter را بزنید و البته سوال کردن تکرار میشود:
اما به جای زدن y و Enter میتوانید دستور yes و سپس اسکریپت را اجرا کنید:
در این صورت چاپ شدن متن در ترمینال سریعاً انجام میشود:
برخی اسکریپتها به این صورت نوشته شدهاند که میبایست کاربر کلمهی yes را کامل تایپ کند و Enter را فشار دهد تا دستور و فرآیند انجام شود. برای این نوع اسکریپتها میتوانید از فرمان yes yes قبل از اجرای اسکریپت استفاده کنید:
دستور yes را بیاحتیاط استفاده نکنید!
همانطور که توضیح دادیم استفاده از دستور yes به معنی تأیید کردن است. اگر اسکریپتی را اجرا کنید که کار مهم و حساسی را انجام میدهد و قبل از آن دستور yes را به کار ببرید، همواره پاسخ سوالات تأییدگونه، مثبت خواهد بود و این ممکن است مشکلات جدی به وجود آورد.
قبل از استفاده از دستور yes کاملاً به تأیید کردن پیاپی سوالات فکر کنید و اگر احتمال اشتباه وجود دارد، از این دستور استفاده نکنید. بنابراین باید در مورد اسکریپتی که اجرا میکنید، اطلاعات کافی داشته باشید.
استفاده از yes حین کار با دستورات در ترمینال
کاربرد دیگر yes قبل از اجرا کردن برخی دستورات است که در ادامه سوالاتی مطرح میکنند. اگر بخواهید ترمینال متوقف نشود و کار را سریعاً انجام بدهد، میتوانید yes را قبل از اجرای دستور استفاده کنید.
به عنوان مثال اگر بخواهید از اپلیکیشن مدیریت پکیجهای نرمافزاری Ubuntu استفاده کنید و در پاسخ به سوال در مورد نصب یک برنامه، y را به نشان تأیید بزنید، میتوانید قبل از فرمان نصب یا apt-get از yes استفاده کنید:
البته در این مورد خاص میتوانید از آپشن -y هم استفاده کنید اما همهی دستورات چنین آپشنی ندارند و بیشتر اوقات باید دستور yes را استفاده کرد.
همانطور که در تصویر فوق مشاهده میکنید، در صورت استفاده از آپشن -y دیگر سوالی در مورد نصب کردن پرسیده نمیشود چرا که apt-get فرض کرده که پاسخ شما مثبت است.
در دیگر توزیعات لینوکس هم اگر بخواهید از ابزار مدیریت پکیجها استفاده کنید و برنامهای را دانلود کرده و نصب کنید، میتوانید برای تأییدهای بعدی، دستور yes را پیش از فرمان نصب استفاده کنید. به عنوان مثال در Fedora حین کار با فرمان yum استفاده از yes به صورت زیر است:
یا به صورت مشابه حین کار با دستور dnf میتوان به جای آپشن -y از دستور yes استفاده کرد.
حین کار با دستوراتی مثل cp برای کپی کردن فایلها یا دستور rm برای حذف کردن فایلها و بسیاری دستورات دیگر هم yes مفید واقع میشود.
چند ترفند کاربردی و کار با دستور yes
میتوانید از دستور yes و ترتیبی از ارقام که با دستور seq ایجاد شده، برای کنترل کردن حلقه استفاده کنید و کاری تکراری که هر بار یک عدد تغییر میکند را انجام بدهید. در واقع دستور yes موجب چاپ شدن اعداد میشود و هر بار عدد چاپ شده تغییر میکند.
دستور زیر یک مثال از این نوع حلقهها است که با فرمان while تکرار میشود. هر بار یک عدد در ترمینال چاپ شده و با استفاده از دستور sleep 1، ترمینال ۱ ثانیه متوقف میشود و در ادامه عدد بعدی چاپ میشود و توقف بعدی اتفاق میافتد. میتوانید به جای چاپ کردن عدد در ترمینال که با دستور echo صورت گرفته، دستور دیگری را اجرا کنید و حتی به جای یک دستور، یک اسکریپت را جهت اجرا فراخوانی کنید.
یک ترفند جالب دیگر برای آزمایش کار با دستوراتی مثل zip یا FTP است. شاید برای کار با این دستورات، به فایل متنی حجیم و طولانی نیاز داشته باشید. میتوانید با فرمان yes چنین فایلهایی را ایجاد کنید. به عنوان مثال دستور زیر متنی که long line of meaningless text for file padding است را مرتباً در خط جدید چاپ میکند و این کار را تا جایی ادامه میدهد که Ctrl + C را فشار بدهید و ترمینال را متوقف کنید. دقت کنید که خروجی که یک متن طولانی است در فایل test.txt و در فولدر کاری فعلی ذخیره میشود. دستورات بعدی برای چک کردن فایل متنی و ظرفیت آن اجرا میشود:
نتیجهی اجرا کردن فرمانهای فوق به این صورت است:
همانطور که مشاهده میکنید فایل متنی ایجاد شده که فقط ۵ ثانیه زمان برای ایجاد کردن آن صرف شده، حجمی معادل ۵۵۷ مگابایت دارد! دستور wc که تعداد خطوط را شمارش میکند، ۱۲.۴ میلیون خط را شمارش کرده است!
برای محدود کردن حجم فایل و تعداد خطها میتوانید از فرمان head استفاده کنید. به عنوان مثال اگر دستور زیر را اجرا کنید، تنها ۵۰ خط اول خروجی دستور قبلی، در فایل متنی test.txt ذخیره میشود:
و این بار مشخصات فایل به صورت زیر است:
تعداد خطوط ۵۰ عدد است و تعداد کلمات ۴۰۰ مورد و حجم فایل متنی نیز ۲۳۵۰ بایت.
در این حالت به محض رسیدن خروجی به ۵۰ خط، دستور متوقف میشود و دیگر نیازی به زدن Ctrl + C نیست.
howtogeekسیارهی آیتی