Bash
گنو بَش (به انگلیسی GNU Bash مخفّف GNU Bourne-again shell) یک پوسته برای سیستمعاملهای شبه یونیکس است که به صورت آزاد و تحت پروانهٔ GPLv3 توسّط برایان فاکس در پروژهٔ گنو نوشته شدهاست.
ویژگیها
بش یک پوستهٔ پازیکس با تعداد قابل توجّهی افزونه است. در ابتدا این پوسته برای سیستمعامل گنو طرّاحی شدهبود، ولی امروزه در بیشتر سیستمعاملهای شبهیونیکس قابل اجرا و پوستهٔ پیشگزیدهٔ اغلب توزیعهای سیستمعامل گنو/لینوکس و همچنین اواس ده مک است. این پوسته به وسیلهٔ شبیهساز پوزیکس سیگوین برای سیستمعامل ویندوز نیز پورت شده است. همچنین خود ویندوز نیز از نگارش ده به بعد، امکان اجرای آن را توسّط مفسّر فراخوانهای سامانهای گنو/لینوکس فراهم کرد است.
تقریباً تمامی اسکریپتهای نوشته شده برای پوستهٔ بورن بدون تغییر در بش نیز قابل اجرایند. همچنین در شکل، دستورهای بش از پوستهٔ کورن و پوستهٔ سی نیز الهام گرفتهاند، مانند ویرایش خط فرمان، تاریخچهٔ فرمان، متغیَرهای RANDOM$
و PPID$
و جایگزینی فرمان مطابق پازیکس (…)$
. ویژگی تکمیل خودکار نیز از ویژگیهای پرکاربرد بش است که میتوان با زدن کلید جهش نام ناکامل برنامهها، پروندهها و متغیرها را به صورت خودکار کامل کرد.
بش دارای تعداد بسیاری افزونه است که پوستهٔ بورن فاقد آنهاست. بش بر خلاف بورن، میتواند بدون اجرا کردن فرایندی بیرونی روی اعداد صحیح محاسبات انجام دهد. بش از شکل دستوری ((…))
و متغیرهایی به صورت ((…))$
برای این کار استفاده میکند. شکل دستورهای بش به گونهای است که امکان تغییر مسیر ورودی/خروجی را به شکل سادهای به کاربر میدهد. به عنوان نمونه بش میتواند خروجی استاندارد و خطای استاندارد را توسّط اپراتور <& در یک زمان تغییر مسیر دهد. همین کار را در پوستهٔ بورن باید توسّط 'command> file 2>&1'
انجام داد که نسبت به بش سختتر است. به دلیل این تفاوتها اسکریپتهای نوشته شده برای بش، به ندرت در پوستههای بورن یا کورن قابل اجرا هستند، مگر این که در نوشتن آنها به سازگاری فرمانهای مورد استفاده توجّه شود. البته در حالت Posix mode خیلی بیشتر از پازیکس تبعیت میکند.
افزونههای براکت
یکی از ویژگیهایی که از پوستهٔ سی به درون بش راه یافته، افزونههای براکت است که میتوان توسّط این امکان ترکیبهایی تکرار شونده به وجود آورد. ترتیب اجرای این دستورهای گسترشیافته از چپ به راست است. به نمونههای زیر توجه کنید :
$ echo a{p,c,d,b}e
ape ace ade abe
$ echo {a,b,c}{d,e,f}
ad ae af bd be bf cd ce cf
از این ویژگی نمیتوان در اسکریپتهایی که قصد داریم قابل حمل باشند استفاده کرد، به دلیل این که بورن خروجی دیگری برای آن تولید میکند :
# A traditional shell does not produce the same output
$ echo a{p,c,d,b}e
a{p,c,d,b}e
وقتی براکتها توسّط نویسههای جایگزین استفاده شوند، ابتدا براکتها و سپس نویسههای جایگزین اعمال میشوند. به عنوان نمونه برای نمایش فهرستی از تصاویر JPEG و PNG موجود در شاخهٔ فعلی، میتوان از دستور زیر استفاده کرد:
$ ls *.{jpg,jpeg,png}
# expands to *.jpg *.jpeg *.png - after which,
# the wildcards are processed
اسکریپتهای راهاندازی
وقتی بش اجرا میشود، دستورهای موجود در اسکریپتهای مختلفی را اجرا می کند.
وقتی بش به عنوان یک پوستهٔ تعاملی اجرا میشود، ابتدا اگر پروندهٔ etc/profile
موجود باشد دستورهای درون آن را میخواند و اجرا میکند. سپس به ترتیب به دنبال یکی از پروندههای bash_profile.
یا bash_login.
یا profile.
در شاخهٔ خانگی کاربر میگردد (/~
). هر کدام را که پیدا کرد، دستورهای درون آن را میخواند و اجرا میکند.
میانبرهای صفحهکلید
میانبرهای گفته شده در زیر برای حالت پیشفرض (ایمکس) است، میانبرهای ویم را میتوان توسّط دستور set -o vi
فعّال کرد.
- جهش: تکمیل خودکار از جایی که مکاننما وجود دارد.
- Ctrl+a : انتقال مکاننما به ابتدای خط (معادل کلید Home)
- Ctrl+e : انتقال مکاننما به انتهای خط (معادل کلید End)
- Ctrl+p : فراخوانی فرمان قبلی (معادل کلید Up)
- Ctrl+n : فراخوانی فرمان بعدی (معادل کلید Down)
- Ctrl+r : جستوجوی آخرین فرمانی که دارای نویسه(های) مشخّصی باشد. زدن دوبارهٔ این کلید در هنگام جستوجو، به فرمان قبلیتر رجوع میکند.
- Ctrl+o : اجرای فرمانی که در جستوجو یافته شد.
- Ctrl+l : پاک کردن محتویات صفحهنمایش (معادل فرمان
clear
). - Ctrl+u : پاک کردن محتویاتی از خط که قبل از مکاننما وجود دارند و رونوشت آنها درون بریدهدان.
- Ctrl+k : پاک کردن محتویاتی از خط که بعد از مکاننما وجود دارند و رونوشت آنها درون بریدهدان.
- Ctrl+w : پاک کردن واژهٔ پیش از مکاننما و رونوشت آن درون بریدهدان.
- Ctrl+y : چسباندن محتویات بریدهدان از جایی که مکاننما وجود دارد.
- Ctrl+d : ارسال یک نشانگر EOF که باعث بسته شدن خط فرمان فعلی میشود (معادل دستور
exit
). (تنها در زمانی این اتّفاق میافتد که متنی در خطّ فعلی موجود نباشد) - Ctrl+c : ارسال یک سیگنال از نوع SIGINT به فرایند فعلی، که باعث پایان اجرا و بسته شدن آن میشود.
- Ctrl+z : ارسال یک سیگنال از نوع SIGTSTP به فرایند فعلی، که باعث به تعلیق در آمدن آن میشود. که برای برگشت دادن آن میتوان از دستور
fg process-name-or-job-id
استفاده کرد. - Ctrl+x Ctrl+e : ویرایش خط فعلی در ادیتوری که توسط متغیّر محلّی EDITOR$ تعریف شده است.
- Alt+f : حرکت به جلو به اندازهٔ یک واژه.
- Alt+b : حرکت به عقب به اندازهٔ یک واژه.
- Alt+Del : برش واژهٔ واقع در پیش از مکاننما
- Alt+d : برش واژهٔ واقع در پس از مکاننما
- Alt+u : تبدیل تمام حروف کوچک به بزرگ، واقع در پس از مکاننما تا انتهای واژهٔ فعلی
- Alt+l : تبدیل تمام حروف بزرگ به کوچک، واقع در پس از مکاننما تا انتهای واژهٔ فعلی
- Alt+c : تبدیل حرف واقع در زیر مکاننما از کوچک به بزرگ و رفتن به انتهای واژهٔ فعلی
- Alt+r : انصراف تغییرات و برگرداندن محتویات خط فعلی به همان شکلی که در تاریخچهٔ خط فرمان موجود بود.