محل فایل اسکریپت
با مجموعه مجوزها، اکنون می توانیم اسکریپت خود را اجرا کنیم:
[me@linuxbox ~]$ ./سلام دنیا
سلام دنیا!
[me@linuxbox ~]$ ./سلام دنیا
سلام دنیا!
برای اینکه اسکریپت اجرا شود، باید قبل از نام اسکریپت یک مسیر واضح قرار دهیم. اگر این کار را نکنیم، این را دریافت می کنیم:
[me@linuxbox ~]$ سلام دنیا
bash: hello_world: دستور پیدا نشد
[me@linuxbox ~]$ سلام دنیا
bash: hello_world: دستور پیدا نشد
چرا این هست؟ چه چیزی اسکریپت ما را از برنامه های دیگر متمایز می کند؟ همانطور که معلوم است، هیچ چیز. فیلمنامه ما خوب است. محل آن مشکل است. در فصل 11، در مورد آن بحث کردیم PATH متغیر محیطی و تأثیر آن بر نحوه جستجوی سیستم برای برنامه های اجرایی. برای جمع بندی، سیستم هر بار که نیاز به یافتن یک برنامه اجرایی داشته باشد، لیستی از دایرکتوری ها را جستجو می کند، اگر مسیر مشخصی مشخص نشده باشد. این روشی است که سیستم می داند اجرا کند
وقتی ls را در خط فرمان تایپ می کنیم /bin/ls. دایرکتوری bin / یکی از دایرکتوری هایی است که سیستم به طور خودکار آن را جستجو می کند. لیست دایرکتوری ها در یک متغیر محیطی به نام PATH نگهداری می شود. متغیر PATH شامل فهرستی از دایرکتوری های جدا شده با کولون است که باید جستجو شوند. ما می توانیم محتویات PATH را مشاهده کنیم:
محل فایل اسکریپت
[me@linuxbox ~]$ پژواک $PATH
/home/me/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
/bin:/usr/games
[me@linuxbox ~]$ پژواک $PATH
/home/me/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:
/bin:/usr/games
در اینجا ما لیست دایرکتوری های خود را می بینیم. اگر اسکریپت ما در هر یک از دایرکتوری های لیست قرار می گرفت، مشکل ما حل می شد. به اولین دایرکتوری در لیست توجه کنید،
/home/me/bin. اکثر توزیعهای لینوکس، متغیر PATH را به گونهای پیکربندی میکنند که حاوی یک فهرست bin در فهرست اصلی کاربر باشد تا به کاربران اجازه دهد برنامههای خود را اجرا کنند. بنابراین اگر دایرکتوری bin را ایجاد کنیم و اسکریپت خود را در آن قرار دهیم، باید مانند سایر برنامه ها شروع به کار کند:
[me@linuxbox ~]$ mkdir bin [me@linuxbox ~]$ mv hello_world bin [me@linuxbox ~]$ سلام دنیا
سلام دنیا!
[me@linuxbox ~]$ mkdir bin [me@linuxbox ~]$ mv hello_world bin [me@linuxbox ~]$ سلام دنیا
سلام دنیا!
و همینطور هم می شود.
اگر PATH متغیر شامل دایرکتوری نیست، ما به راحتی می توانیم آن را با قرار دادن این خط در فهرست خود اضافه کنیم .bashrc فایل:
صادرات PATH=~/bin:"$PATH"
صادرات PATH=~/bin:"$PATH"
پس از ایجاد این تغییر، در هر جلسه ترمینال جدید اعمال می شود. برای اعمال تغییر در جلسه ترمینال فعلی، باید پوسته را دوباره بخوانیم .bashrc فایل. این را می توان با "منبع" آن انجام داد:
[me@linuxbox ~]$ . .bashrc
[me@linuxbox ~]$ . .bashrc
نقطه (.) دستور مترادف کلمه است منبع فرمان، یک پوسته داخلی که فایل مشخصی از دستورات پوسته را می خواند و مانند ورودی از صفحه کلید با آن رفتار می کند.
توجه: اوبونتو (و سایر توزیعهای مبتنی بر دبیان) به طور خودکار آن را اضافه میکند
دایرکتوری ~/bin به متغیر PATH اگر دایرکتوری ~/bin هنگام اجرای فایل bashrc. کاربر وجود داشته باشد. بنابراین، در سیستم های اوبونتو، اگر دایرکتوری ~/bin را ایجاد کنیم و سپس از سیستم خارج شویم و دوباره وارد شویم، همه چیز کار می کند.