Bash نوع برنامه هایی که باید اجرا شوند را تعیین میکند. برنامههای معمولی فرمانهای سیستم هستند که به شکل ترجمه شده در سیستم شما وجود دارند. وقتی چنین برنامهای اجرا میشود، یک پردازش جدید تولید میشود، چون Bash یک کپی ازخودش میسازد. این پردازش فرزند همان محیط والدش را دارد، فقط شماره پردازش آن (ID) تفاوت خواهد داشت. این فرایند forking نامیده میشود.
بعد از فرایند انشعاب ، فضای آدرس دهی پردازش فرزند با دادههای جدیدبازنویسی میشود. این از طریق یک فراخوان exec سیستم انجام میگردد.
مکانیسم fork-and-exec به این طریق یک فرمان قدیمی را با جدید تعویض میکند، در حالیکه محیط در برنامه جدیدی که اجرا میشود باقی میماند، ازجمله پیکربندی دستگاههای ورودی و خروجی، متغیر های محیط واولویتها. این مکانیسم برای ایجاد تمام پردازشهای یونیکس به کار میرود، وهمینطور درسیستم عامل لینوکس هم صدق میکند. حتی اولین پردازش، init ،با شماره پردازش ۱ ،درجریان پردازش بوت موسوم به پردازش bootstrapping منشعب میشود .
دستورات داخلی بخشی از خود شل هستند. وقتی نام یک دستور داخلی به صورت اولین کلمه یک دستور ساده به کار میرود، شل دستور را مستقیماً بدون ایجاد پردازش جدید اجرا میکند. دستورات داخلی برای پیادهسازی قابلیتهایی، که فراهم نمودن آنها به صورت برنامههای جداگانه غیرممکن یا ناجور میباشند، ضروری هستند.
Bash سه نوع دستور داخلی را پشتیبانی میکند :
:, ., break, cd, continue, eval, exec, exit, export, getopts, hash, pwd, readonly, return, set, shift, test, [, times, trap, umask و unset.
alias, bind, builtin, command, declare, echo, enable, help, let, local, logout, printf, read, shopt, type, typeset, ulimit و unalias.
وقتی Bash در حالتPOSIX اجرامیشود، دستورات داخلی ویژه در سه مورد با سایر دستورات داخلی تفاوت دارند :
دستورات داخلی ویژه، درضمن بازبینی قبل از توابع شناخته میشوند.
اگر یک دستور داخلی ویژه یک خطای وضعیت ارسال کند، شل غیر محاورهای خارج میشود .
تأثیر جملات واگذاریی قبل از دستور، پس از انجام دستور، درمحیط شل باقی میماند.
دستورات داخلی ویزه در POSIX عباتند از :, ., break, continue, eval, exec, exit, export, readonly, return, set, shift, trap and unset.
اکثر این دستورات داخلی در فصلهای بعد بحث خواهند شد .برای آن دستوراتی که این مورد در باره آنها صادق نیست، به صفحههای info ارجاع میدهیم.
وقتی برنامهای که اجرا میشود یک شل اسکریپت باشد، bash یک پردازش bash جدید با استفاده از fork ایجاد میکند. این زیرپوسته سطرهای اسکریپت پوسته را به صورت هر دفعه یک سطر میخواند. دستورات هر سطر خوانده شده، همانگونه که اگر به طور مستقیم از صفحه کلید دریافت میشدند، تفسیر و اجرا میشوند.
در حالیکه زیرپوسته سطرهای اسکریپت را پردازش مینماید ، شل والد منتظر تمام شدن پردازش فرزند میماند. وقتی سطر دیگری برای خواندن در اسکریپت نباشد، زیرپوسته خاتمه مییابد. شل پدر بیدار میشود و یک اعلان فرمان نمایش میدهد .