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

لطفاً به انجمن‌ها وارد شده و یا جهت ورود ثبت‌نام نمائید

لطفاً جهت ورود نام کاربری و رمز عبورتان را وارد نمائید


توزیع گنو/لینوکس اوبونتو ۲۰ ساله شد 🎉

نویسنده موضوع: اجرای سریالی چند اسکریپت  (دفعات بازدید: 3001 بار)

0 کاربر و 5 مهمان درحال مشاهده موضوع.

آفلاین Риал Краесис

  • High Hero Member
  • *
  • ارسال: 1178
  • جنسیت : پسر
  • !!! I FIGHT FOR THE USERS
پاسخ : اجرای سریالی چند اسکریپت
« پاسخ #15 : 20 آبان 1394، 09:34 ب‌ظ »
خب این هم هیچ تفاوتی ایجاد نمیکنه ها.
بالفرض اسکریپت اول هون قبلی باشه ولی توی دومی فقط یه دستور echo داشته باشیم که یه چیزی بنویسه واسمون.
باز هم به محض گرفتن ارور کل اجرا متوقف میشه و دومی هم اجرا نمیشه.
ضمن اینکه من وابستگی دومی به اولی رو که شما ذکر کردی متوجه نمیشم،چه وابستگی ای دارن؟
اشتباه میکنی!
نگاه کن:
محتویات اسکریپت اول:
#!/bin/bash
mkdir 2
cp ../1.txt > ../2
محتویات اسکریپت دوم:
#/bin/bash
cd 2
touch r.txt
حالا نتیجه اجرا:
fouruhar@fouruhar/mnt/My/m
>>> sh 1.sh && sh 2.sh                            21:32.10 Wed Nov 11 2015 >>>
cp: missing destination file operand after ‘../1.txt’
Try 'cp --help' for more information.
محتویات پوشه ۲:
fouruhar@fouruhar/mnt/My/m/2
>>> ls                                            21:32.58 Wed Nov 11 2015 >>>
r.txt
« آخرین ویرایش: 20 آبان 1394، 09:37 ب‌ظ توسط Риал Краесис »


If you do not like Arch use Gentoo and just shut up
 and If you do not like Gentoo use Arch and shut up
finaly If you do not like either use Ubuntu and shut the f*** up

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : اجرای سریالی چند اسکریپت
« پاسخ #16 : 20 آبان 1394، 11:00 ب‌ظ »
دستور بعد از && تنها پس از اجرای موفقیت‌آمیز دستور اول اجرا می‌شه. اگر نخواید وابسته به دستور قبل باشه، بجای && از ; استفاده کنید.

اسکریپت‌هاتون هم با sh اجرا نکنید، بهشون قابلیت Executable بدید و مستقیم اجرا کنید.

آفلاین Риал Краесис

  • High Hero Member
  • *
  • ارسال: 1178
  • جنسیت : پسر
  • !!! I FIGHT FOR THE USERS
پاسخ : اجرای سریالی چند اسکریپت
« پاسخ #17 : 21 آبان 1394، 01:04 ق‌ظ »
دستور بعد از && تنها پس از اجرای موفقیت‌آمیز دستور اول اجرا می‌شه. اگر نخواید وابسته به دستور قبل باشه، بجای && از ; استفاده کنید.

اسکریپت‌هاتون هم با sh اجرا نکنید، بهشون قابلیت Executable بدید و مستقیم اجرا کنید.

پس چرا تو مورد من این اتفاق نیفتاده؟؟؟؟ ](*,) ](*,) ](*,) ](*,) ](*,)


If you do not like Arch use Gentoo and just shut up
 and If you do not like Gentoo use Arch and shut up
finaly If you do not like either use Ubuntu and shut the f*** up

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : اجرای سریالی چند اسکریپت
« پاسخ #18 : 21 آبان 1394، 02:11 ق‌ظ »
پس چرا تو مورد من این اتفاق نیفتاده؟؟؟؟ ](*,) ](*,) ](*,) ](*,) ](*,)
نوشته‌های من (که دو خط هم بیشتر نبود) رو خوندید؟ بدون sh تست کردید؟ :)

آفلاین Nelliel

  • High Hero Member
  • *
  • ارسال: 2151
  • جنسیت : پسر
  • Nelliel Tu Odelschwanck
پاسخ : اجرای سریالی چند اسکریپت
« پاسخ #19 : 21 آبان 1394، 05:46 ق‌ظ »
nixoeen جان خودت داری میگی با موفقیت اجرا شه حالا اون اجرا شد دیگه کاری به اسکریپت نداره که توش چی هست . الان کاری شما گفتی را احسان کرد برو خروجیش را ببین.
 
در ضمن دوستی که سوال پرسید میخواست وابسته به صحیح اجرا شدن اسکریپت قبلی باشه.
طرفدار انیمه و مانگا - کاربر آرچ لینوکس

آفلاین nixoeen

  • ناظر انجمن
  • *
  • ارسال: 4872
  • جنسیت : پسر
  • masoft قدیم
پاسخ : اجرای سریالی چند اسکریپت
« پاسخ #20 : 21 آبان 1394، 04:30 ب‌ظ »
معلومه که کار داره توش چی هست :)


یه موضوع ساده نیازی به اینقدر بحث نداره که، دوباره چیزی که نوشتم رو میذارم! بخونیدش بجای اینکه حرف‌های خودتون رو تکرار کنید:

دستور بعد از && تنها پس از اجرای موفقیت‌آمیز دستور اول اجرا می‌شه. اگر نخواید وابسته به دستور قبل باشه، بجای && از ; استفاده کنید.

اسکریپت‌هاتون هم با sh اجرا نکنید، بهشون قابلیت Executable بدید و مستقیم اجرا کنید.
« آخرین ویرایش: 21 آبان 1394، 04:34 ب‌ظ توسط nixoeen »

آفلاین mahrooz

  • Newbie
  • *
  • ارسال: 14
پاسخ : اجرای سریالی چند اسکریپت
« پاسخ #21 : 04 آذر 1394، 07:52 ق‌ظ »
سلام
عملگر کنترلی && نماینده and منطقی است که برای اجرای شرطی، یعنی انجام یک عمل بر اساس موفقیت دستور قبلی استفاده می‌شود. بنابراین صحیح است که:

دستور بعد از && تنها پس از اجرای موفقیت‌آمیز دستور اول اجرا می‌شه. اگر نخواید وابسته به دستور قبل باشه، بجای && از ; استفاده کنید.

اسکریپت‌هاتون هم با sh اجرا نکنید، بهشون قابلیت Executable بدید و مستقیم اجرا کنید.

اما در انطباق آن با موضوع پرسش دقت لازم به عمل نیامده است.
در اختلاف نظر میان دوستان ما حسین حیدری و ناظر محترم انجمن (nixoeen)، حق با حسین است اما ایشان فقط به طور تجربی (با استناد به نمونه طراحی شده‌اش) نظر خود را بیان کرده و نتوانسته با استفاده از مفاهیم اسکریپت‌نویسی صحت نظر خود را نشان دهد.
از طرف دیگر ناظر محترم نیز با عدم دقت کافی در مفاهیم اسکریپت‌نویسی، در انطباق یک مفهوم دقیق با مورد سؤال دچار لغزش گردیده و حکم نادرستی را ارایه نموده است و متأسفانه انعطاف لازم را نشان نداده و به مثال تجربی حسین حیدری و آنچه او با بیانی نارسا می‌گوید اعتنا ندارد و در درستی حکم خود تردید نمی‌کند چون به درستی اطمینان دارد که «دستور بعد از && تنها پس از اجرای موفقیت‌آمیز دستور اول اجرا می‌شه.» و بنابراین متوجه لغزش نمی‌شود.
گفتیم && عملگر and منطقی است در این معنا فقط اگر وضعیت برگشتی دستور یا عبارت طرف چپ آن  موفقیت باشد، دستور یا عبارت سمت راست آن اجرا می‌گردد. تا اینجا با ناظر محترم اختلاف نظری نیست، غیر از آنکه برای دقت بیشتر، کلمه عبارت را به حکم اولیه ایشان اضافه نموده‌ام.
از همین کلمه افزوده استفاده کرده و می‌گویم در اینجا با یک دستور مواجه نیستیم که در آنصورت کاملاً حق با ایشان بود. در این مورد خاص سمت چپ عملگر کنترلی یک اسکریپت است.
بنابراین فقط اگر وضعیت برگشتی از اسکریپت موفقیت باشد، بخش سمت راست عملگر && اجرا می‌شود. پس لازم است به مفهوم وضعیت برگشتی اسکریپت به طور دقیق‌تر توجه نماییم.
همانطور که شما دوستان می‌دانید اسکریپت می‌تواند از تعدادی دستور و برخی ساختارهای پوسته تشکیل شده باشد و اجرای هر یک از دستورات می‌تواند موفق یا ناموفق باشد و شکست در اجرای یک دستور به معنای انصراف از بقیه اسکریپت نیست (مگر اینکه نویسنده اسکریپت با استفاده از روش‌های مناسب، آنطور تعیین نماید). بنابراین ممکن است برخی فرمان‌ها به طور موفق و بعضی به طور ناموفق اجرا شوند اما در نهایت وضعیت خروج یا کد برگشتی اسکریپت برابر با وضعیت خروج آخرین دستور اجرا شده در اسکریپت خواهد بود. به این ترتیب امکان آن هست که اسکریپت به طور تمام و کمال اهداف تعیین شده را انجام ندهد اما وضعیت خروج موفقیت را برگشت بدهد.
نکته‌ای که ناظر محترم از نظر دور داشته آن است که در اسکریپت دستورات با استفاده از عملگر && به یکدیگر متصل نمی‌شوند که اگر یکی از دستورات با عدم موفقیت همراه باشد، اسکریپت خارج شود و وضعیت خروج ناموفق ارایه کند. این کار به عهده نویسنده اسکریپت است. نویسنده می‌تواند با استفاده از اجرای شرطی در داخل اسکریپت تعیین نماید که در صورت عدم موفقیت فرمان مورد نظر از ادامه اسکریپت صرفنظر شود که در این صورت وضعیت خروج غیر صفر یعنی ناموفق را برگشت می‌دهد.
(البته نویسنده اسکریپت می‌تواند با استفاده از ‎exit N‎ کد برگشتی N را مشخص کند).
نتیجه:
پرسش کننده محترم برای رسیدن به مقصود خود باید کد اسکریپت را به طریقی اصلاح نماید که در صورت وقوع هر اتفاق ناخواسته (عدم اجرای هر فرمان یا فرمان مورد نظر ایشان یا رخداد خطا و...) اسکریپت با وضعیت خروج عدم موفقیت خارج شود ( در صورت لزوم روش اصلاح می‌تواند موضوع پرسش دیگری باشد). آنگاه می‌تواند راهنمایی دوستان را در مورد استفاده از عملگر کنترلی && به کار ببرد.