انجمنهای فارسی اوبونتو
کمک و پشتیبانی => راهنماها، نکات و ترفندها => نویسنده: 🇬🇧بریتانیای کبیر🇬🇧 در 14 تیر 1402، 12:23 بظ
-
چون دیدم که در یکی از نوشته های دیروز یکی اومد در مورد یکی از روش های اجراء فایل هایی که مسیرشون در PATH نیست یه چیزی گفت، من بیام تفاوت ها و انواع روش های اجراء فایل هایی که مسیرشون در متغیر PAHT نیست رو بگم
من فقط همین ۶ تا روشو میشناسم. از این ۶ تا هم فقط این تفاوت ها رو میشناسم. اگه نکته ی مهمی یا هر چیزی بود که من نگفتم بگید.(یا اگه جایی رو اشتباه هم گفتم بگید)
نکته: به اینکه اسکریپت در پوسته ی جاری یا پوسته ی جدید اجرا میشه دقت کنید. چون متغیر ها و تغیراتی که در پوسته ی جدید ایجاد شده، با پایان اسکریپت از بین میره و شما اگه اون تغیراتو در فایل bashrc. ذخیره نکرده باشید پوسته های دیگه نمیتونن به اونا دسترسی داشته باشن. برای استفاده(در پوسته ی جدید) از متغیر و توابعی که فقط در پوسته ی جاری تعریف کردید(در فایل bashrc. نیستن) نیاز دارید که متغیر ها و توابعو export کنید. اگه این نکته رو نفهمیدید عیبی نداره، چند بار که پوسته هارو درون هم اجرا کردید و خواستید که اطلاعات یک پوسته رو در پوسته ی دیگه اجرا کنید متوجه میشید.
روش اول:
bash file.sh
محل اجراء: یک پوسته جدید
مواردی که میشه اجراء کرد: فقط اسکریپت bash
نیاز به دسترسی x: خیر
روش دوم:
source file.sh
محل اجراء: پوسته جاری
مواردی که میشه اجراء کرد: فقط اسکریپت bash
نیاز به دسترسی x: خیر
روش سوم:
. file.sh
این روش کاملا مثل روش دوم هست. اصلا [.] یک کوتاه نوشت برای دستور source هست.
روش چهارم:
./file.py
محل اجراء: پوسته جدید
مواردی که میشه اجراء کرد: فایل اجرائی، اسکریپت بش، اسکریپت به زبان های مفسری و پوسته های دیگه
نیاز به دسترسی x: بله
نکته: برای اینکه بتونید اسکریپت به زبان های مفسری یا پوسته های دیگه رو اجرا کنید باید در ابتدای فایل مفسرو با روش زیر مشخص کنید.(کلا همیشه در هر اسکریپتی که قرار از بش اجرا شه حتی اگه اسکریپت خود بش باشه استاندارد اینکه مفسرو در اول فایل مشخص کنید.
#!/bin/python3
روش پنجم:
bash -c 'command'
این روش مثل روش اول هست ولی خوبش اینکه میشه علاوه بر اسکریپت شل، فایل دیگه رو مثلا به صورت زیر در پوسته جدید اجرا کرد
bash -c 'python3 main.py'
روش ششم:
Absolute Path
/bin/echo salam
این همون روش چهارم هست ولی فرقش این هست که باید در مواردی مثل cron استفاده بشه(اگه PATH تعریف نشه)
نکته: در مثال روش ششم شاخه bin/ در متغیر PATH تعریف شده ولی این متغیر در cron قابل دسترسی نیست، بهتره برای راحتی متغیر PATH در cron تعریف کنید.
در همه روش ها میتویند به چیزایی که اجرا میکنید آرگومان شوت کنید یا position var بدید
-
این رو ویکی کن
-
این رو ویکی کن
بلد نیستم. از آموزششم چیری نفهمیدم. :(
-
این رو ویکی کن
بلد نیستم. از آموزششم چیری نفهمیدم. :(
با همین حساب اینجا وارد شو . موضوعی که میخوای بنویسی رو جستجو کن اگه نباشه میگه بسازیدش
برای عنوان == یا = ( فکر کنم حکم تگ h1 h2 رو داره ) بذارید دو طرف عنوان ها
برای قرار دادن کد هم الگو کد رو از یک صفحه دیگه با ویرایش برداری
اگه نتونستید بهم پیام بدید میذارمش
-
با ld-linux هم میشه
/lib64/ld-linux-x86-64.so.2 /bin/ls
روش چهارم و ششم که گفتید عملا یکیه. برای اجرای یه فایل که دسترسی اجرایی داره، میتونید مسیری که به اون فایل ختم میشه رو بنویسید.
مثلا برای اجرای ls اینجوری:
/bin/apt
مسیردهی میدونه یه شکل مطلق (مثل بالا) یا به طور نسبی باشه. مثلا اگه داخل دایرکتوری /etc/ باشید، میتونید اینجوری هم ls رو اجرا کنید:
../bin/ls
الان فرض کنید داخل دایرکتوری زیر قرار دارید
/home/myusr/
و میخواهید فایل prog که توی همین دایرکتوری قرار داره رو اجرا کنید. با هر سه تا روش پایین میشه اینکار رو انجام داد:
/home/myusr/prog
./prog
../myusr/prog
اولی که مشخصه. مسیر مطلق رو داده.
توی دومی مسیر نسبی داده. میگه توی دایرکتوری فعلی، فایل prog رو اجرا کن.
توی سومی هم به صورت نسبی مشخص کرده. گفته برو دایرکتوری بالایی بعد وارد دایرکتوری myusr شو و فایل prog رو اجرا کن. (من برای راحتی جمله بندی از عبارت "وارد شو" و "برو" استفاده کردم. ولی در واقعیت هیچ تغییر دایرکتوری انجام نمیشه. این مسیر به فراخوان سیستمی ()exec داده میشه تا کرنل هر فایلی اونجا هست رو اجرا کنه)
حالا اون مثال اول که گفتم چجوری کار میکنه؟