انجمن‌های فارسی اوبونتو

تازه کار => انجمن تازه‌کاران => نویسنده: blackknight7323 در 30 اردیبهشت 1402، 03:52 ب‌ظ

عنوان: سوال راجع به shell
ارسال شده توسط: blackknight7323 در 30 اردیبهشت 1402، 03:52 ب‌ظ
تفاوت bin/bash و bin/sh چیه؟  bin/sh در لینوکس من dash هست.میدونم که dash هم یک نوع shell  هست.
چرا دوتا نوع shell داره لینوکس؟
عنوان: پاسخ : سوال راجع به shell
ارسال شده توسط: سید وحید رضا برهانی در 30 اردیبهشت 1402، 04:54 ب‌ظ
/bin/sh فقط یک شورت کات هست به شل. ببین مثلا فرض کن من بش دارم و تو دش خب حالا اگر یک نرم افزار بخواهد به شل دسترسی داشته باشه باید از کجا بفهمه شل من چیه؟ برای همین مشکل می یاد sh رو اجرا می کنه که هرچیزی که باشه شل کاربر هست.
عنوان: پاسخ : سوال راجع به shell
ارسال شده توسط: TAHAMOKHTARY در 30 اردیبهشت 1402، 05:07 ب‌ظ
/bin/sh فقط یک شورت کات هست به شل. ببین مثلا فرض کن من بش دارم و تو دش خب حالا اگر یک نرم افزار بخواهد به شل دسترسی داشته باشه باید از کجا بفهمه شل من چیه؟ برای همین مشکل می یاد sh رو اجرا می کنه که هرچیزی که باشه شل کاربر هست.
نمیدونم ولی من توی آموزش آقای امیر صمیمی دیدم میگفت دو پوسته ی جدا هستند و هرگز نباید اسکریپت بش رو با sh اجرا کرد.
عنوان: پاسخ : سوال راجع به shell
ارسال شده توسط: سید وحید رضا برهانی در 30 اردیبهشت 1402، 08:02 ب‌ظ
من نمی دونم اونجا چه شرایطی بوده که اینطوری گفتن (مثلا ممکن پوسته پیش فرض zsh بوده و ایشون می خواستن اسکریپت رو با بش اجرا کنند که در اون صورت حرفشون درسته)
ولی وقتی دستور
file /bin/bash رو بزنی خیلی واضح می گه که یک سیمبولیک لینک هست به شل پیشفرض سیستم.
البته شاید من اشتباه بکنم.
عنوان: پاسخ : سوال راجع به shell
ارسال شده توسط: moheb2000 در 30 اردیبهشت 1402، 08:18 ب‌ظ
/bin/sh فقط یک شورت کات هست به شل. ببین مثلا فرض کن من بش دارم و تو دش خب حالا اگر یک نرم افزار بخواهد به شل دسترسی داشته باشه باید از کجا بفهمه شل من چیه؟ برای همین مشکل می یاد sh رو اجرا می کنه که هرچیزی که باشه شل کاربر هست.
نمیدونم ولی من توی آموزش آقای امیر صمیمی دیدم میگفت دو پوسته ی جدا هستند و هرگز نباید اسکریپت بش رو با sh اجرا کرد.

دلیل این گفته این بوده که bash script یک سری تفادت هایی در سینتکس داره که روی بقیه شل ها مثل zsh اجرا نمیشه بنابراین وقتی یک برنامه bash script می نویسید حتما باید با /usr/bash اجرا شه تا اگه شل پیشفرض کاربر، چیزی غیر از بش مانند zsh یا fish باشه با اونها اجرا نکنه و با خطا مواجه نشه. به عبارتی اگه شل پیشفرض شما zsh باشه ولی بالای اسکریپت خودتون نوشته باشید:
#!/bin/bash
اسکریپت شما با bash اجرا خواهد شد و با ارور مواجه نمیشید
عنوان: پاسخ : سوال راجع به shell
ارسال شده توسط: esmaeelE در 31 اردیبهشت 1402، 11:45 ق‌ظ
پوسته(Shell) رابط کاربری در سیستم‌عامل است که می‌تونه متنی یا گرافیکی باشه.
پوستهٔ گرافیکی همون محیط میزکاری است که استفاده می‌کنید مانند گنوم، XFCE
پوستهٔ متنی در رابط کاربری متنی(شبیه‌ساز پایانه) اجرا می‌شود (برای نمونه‌ BASH)

پوسته در ویکی فارسی اوبونتو (https://wiki.ubuntu.ir/wiki/%D9%BE%D9%88%D8%B3%D8%AA%D9%87)

می‌تونید انواع مختلفی پوسته روی سیستم نصب کنید. همانطور که می‌شود همزمان دو محیط میزکار داشت محدودیت در پوستهٔ متنی هم وجود ندارد.

sh روی سیستم‌های امروزی یک میانبر به پوسته‌ای دیگر است و به نظر برای سازگاری با نسخه‌های پیشین نگه‌داری شده است به این شکل که برنامه‌های قدیمی نوشته‌شده بدون تغییر خاصی روی سیستم‌های جدید قابل اجرا باشند.
در اصل sh نام پوستهٔ اولیهٔ یونیکس بوده است.

می‌تونید با ترکیب فرمان‌های زیر دقیق بررسی کنید که هر نام به کدام پوسته اشاره دارد.

whereis sh
ls -l /usr/bin/sh

خروجی

دبیان
$ ls -l /usr/bin/sh
lrwxrwxrwx 1 root root 4 Nov  2  2022 /usr/bin/sh -> dash

ردهت
$ ls -l /usr/bin/sh
lrwxrwxrwx 1 root root 4 Nov  2  2022 /usr/bin/sh -> dash

اوراکل سولاریس
$ ls -ltrh /usr/bin/sh
lrwxrwxrwx   1 root     root          13 Oct 28  2020 /usr/bin/sh -> sparcv9/ksh93

روی این سیستم sh به korn shell اشاره می‌کند.
چرا اوبونتو پیوند sh را روی dash به جای bash تنظیم کرده است؟

dash برای اجرای کدنوشته‌ها سریع‌تر از bash است که برای کاربردهای تعاملی مناسب است.
https://askubuntu.com/questions/976485/what-is-the-point-of-sh-being-linked-to-dash
https://askubuntu.com/a/1104627/678872