Bash
بَش یک پوسته یونیکس است که به صورت آزاد توسط برایان فاکس برای پروژهٔ گنو نوشته شدهاست. نام بَش سرنام Bourne-again shell در انگلیسی است.
ویژگیها
بش یک پوستهٔ پازیکس با تعداد قابل توجهی افزونه است. در ابتدا این پوسته برای سیستمعامل گنو طراحی شدهبود. اما بش در اکثر سیستمعاملهای خانواده شبه-یونیکس قابل اجراست. پوستهٔ پیشفرض در اکثر سیستمعاملهایی که از هسته لینوکس استفاده میکند، است. همچنین پوستهٔ پیشفرض سیستمعامل مک اواس ده که مبتنی بر داروین است نیز میباشد. این پوسته برای سیستمعامل مایکروسافت ویندوز به وسیلهٔ شبیهساز پوزیکس به نام سیگوین انتقال داده شدهاست.
اکثر قریب به اتفاق اسکریپتهای نوشته شده برای پوسته بورن بدون تغییر در Bash نیز قابل اجرا هستند. همچنین در شکل دستورهای (Command Syntax) بش، از Korn shell و سی شل نیز الهام گرفته شده است، مانند ویرایش خط فرمان، تاریخچهی فرمان، متغیرهای RANDOM$
و PPID$
و جایگزینی فرمان مطابق پازیکس (…)$
. تکمیل خط فرمان نیز از ویژگیهای پرکاربرد Bash است که میتوان با زدن کلید تب نام ناکامل برنامهها، فایلها و متغیرها را بصورت خودکار کامل کرد.
بش دارای تعداد بسیاری افزونه است که Bourne shell فاقد آنهاست. بش میتواند بر خلاف Bourne shell بدون اجرا کردن پروسهای بیرونی بر روی اعدا صحیح محاسباتی را انجام دهد. بش از شکل دستوری ((…))
و متغیرهایی بصورت ((…))$
برای اینکار استفاده میکند. شکل دستورهای بش بگونهای است که امکان تغییر مسیر ورودی/خروجی را به شکل سادهای به کاربر میدهد. بعنوان نمونه بش میتواند خروجی استاندارد (stdout) و خطای استاندارد (stderr) را توسط اپراتور <& در یک زمان تغییرمسیر دهد. همین کار را در Bourne shell باید توسط 'command> file 2>&1'
انجام داد که نسبت به بش سختتر است. بدلیل این تفاوتها اسکریپتهای نوشته شده برای بش، بندرت در Bourne shell یا Korn Shell قابل اجرا هستند مگر اینکه در نوشتن آنها به سازگاری فرمانهای مورد استفاده توجه شود. البته در حالت Posix mode خیلی بیشتر از پازیکس تبعیت میکند.
افزونههای براکت
یکی از ویژوگیهایی که از سی شل به درون Bash راه یافته افزونههای براکت است که میتوان توسط این امکان ترکیبهایی تکرار شونده بوجود آورد. ترتیب اجرای این دستورهای گسترش یافته از چپ به راست است. به نمونههای زیر توجه کنید : <source lang="bash"> 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 </source>
از این ویژگی نمیتوان در اسکریپتهایی که قصد داریم قابل حمل باشند استفاده کرد، بدلیل اینکه Bourne shell خروجی دیگری برای آن تولید میکند : <source lang="bash">
- A traditional shell does not produce the same output
echo a{p,c,d,b}e # a{p,c,d,b}e </source>
وقتی براکتها توسط کارکترهای جایگزین {{انگلیسی|wildcards استفاده شوند، ابتدا براکتها و سپس کارکترهای جایگزین اعمال میشوند. بعنوان نمونه برای نمایش لیستی از تصاویر JPEG و PNG موجود در دایرکتوری فعلی، میتوان از دستور زیر استفاده کرد: <source lang="bash"> ls *.{jpg,jpeg,png} # expands to *.jpg *.jpeg *.png - after which,
# the wildcards are processed
</source>
اسکریپتهای راهاندازی
وقتی Bash اجرا میشود، دستورهای موجود در اسکریپتهای مختلفی را اجرا می کند.
وقتی Bash بعنوان یک پوستهی تعاملی اجرا میشود، ابتدا اگر فایل etc/profile/
موجود باشد دستورهای درون آنرا میخواند و اجرا میکند. سپس بترتیب بدنبال یکی از فایلهای bash_profile.
یا bash_login.
یا profile.
در دایرکتوری خانگی کاربر میگردد (/~
). هر کدام را که در ابتدا پیدا کرد، دستورهای درون آنرا میخواند و اجرا میکند.
میانبرهای صفحهکلید
میانبرهای گفته شده در زیر برای حالت پیشفرض (ایمکس) است، میانبرهای ویم را میتوان توسط دستور set -o vi
فعال کرد.
- TAB : تکمیل خودکار از جایی که مکاننما وجود دارد.
- 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 : انصراف تغییرات و برگرداندن محتویات خط فعلی به همان شکلی که در تاریخچهی خط فرمان موجود بود.