کدام یک بهتر است: استفاده؛ یا && برای اجرای چندین دستور در یک خط؟


به جواب پذیرفته شده بروید




در آموزش ها و نحوه چگونه اغلب دستورات را می بینم. برای مثال،

 sudo apt-get update && sudo apt-get install pyrenamer
 

به نظر می رسد چهار اتصال دهنده ممکن است: & ، && ، || و ; . گرچه & اتصال برای من واضح است (این فرایند را به پس زمینه می فرستد و ترمینال را در دسترس می گذارد) ، اما مشخص نیست تفاوت بین && و چه تفاوت است ; . و من از || اظهار نظر کایا خبر نداشتم .

سوالات زیر با تفاوت بین دو کانکتور ارتباط دارد ، اما این کار بیشتر در نظرات انجام می شود:

بنابراین در اینجا تعدادی سوال مرتبط وجود دارد:

  1. چه تفاوتی بین است ; و && ؟
  2. چه موقع باید به ترتیب از آنها استفاده کنید ؟ خوب است که برخی از موارد استفاده را ببینید: اگر می خواهم یک فرمان را اجرا کنم و بعد از آن خاموش کردن رایانه خود ، کدام کانکتور را انتخاب کنم؟
  3. آنها چه هستند مزایای و خطرات ؟ رابی باساک در اظهارنظر به این پاسخ خاطرنشان cd /somewhere_else; rm -Rf * می کند که برای مثال اگر اولین عنصر در زنجیره فرمان نتواند عواقب مخرب داشته باشد ، مثلاً می تواند مانند پیامدهای مخرب داشته باشد.
  4. اگر مرتبط باشد ، آنها از کجا آمده اند؟

450









5 :تعداد پاسخها


برگه تقلب:

 A; B    # Run A and then B, regardless of success of A
A && B  # Run B if and only if A succeeded
A || B  # Run B if and only if A failed
A &     # Run A in background.
 

809



&& تنها در صورتي كه دستور اول از وضعيت 0 خارج شود (موفق شد) فرمان دوم را اجرا مي كنيد. ; هر دو دستور را اجرا می کند ، حتی اگر اولین آن با وضعیت غیر صفر خارج شود.

مثال شما با مثال && می تواند برابر باشد

 if sudo apt-get update ; then
    sudo apt-get install pyrenamer
fi
 

77



استفاده از ; این دستورات را صرف نظر از موفقیت اولین یا عدم اجرای دستورات اجرا می کند.

با استفاده از && دستور 2 فقط در صورت اجرای اولین فرمان با موفقیت (وضعیت 0).

هر دو در چشم اندازهای مختلف استفاده می شوند. مانند یک فرآیند طولانی تر ، برای نصب لازم برای تهیه و نصب آن بگویید. شما باید make && make install . بنابراین نصب فقط در صورت make موفقیت انجام می شود.

بنابراین برای دستورات وابسته باید از آنها استفاده کنید &&

نوشتن bash یا دستوراتی با استفاده از دستورات مستقل ;

بنابراین اگر می خواهید کامپیوتر را خاموش کنید حتی اولین کار ناموفق بود ; ، اما در صورت موفقیت کامل شغل اول می خواهید استفاده خاموش را آغاز کنید &&


32



a ; b بدون در نظر گرفتن وضعیت خروج از a b اجرا خواهد شد. a && b فقط در صورت موفقیت موفق به اجرای b می شود.

این برای پاسخ به 3 سؤال اول لازم و کافی است. به طور خاص ، این 2 بسیار گسترده است ، و نمی توان جواب قطعی "یک" داد - بهترین شرط شما این است که به صورت موضوعی تصمیم بگیرید.

در مورد سوال چهارم: آنها نحو Bash هستند .

هیچ خطر ذاتی در استفاده از آن وجود ندارد. باز هم ، تعریف بالا کافی است. این نشان میدهد که شما ارسال خواهد شد && که b اثرات ناخواسته است اگر a موفق نمی شود. نیازی به قوانین یا توضیحات بیشتر نیست ، IMHO.


15



آ؛ B # بدون در نظر گرفتن موفقیت A ، اجرای A و سپس B را اجرا کنید

A && B # اگر B موفق شد ، B و B را اجرا کنید

A || B # اگر B شکست خورد اگر و فقط B اجرا کنید

A & # A را در پس زمینه اجرا کنید.

یک قانون بسیار خوب از انگشت شست. این را اضافه کنم که در بعضی موارد ، وقتی می خواهیم آنها را به عنوان یک واحد واحد در نظر بگیریم ، با استفاده از این دستورات به صورت زیر معنی می دهیم یا نمی خواهیم برخی از نتایج عملیات را با پوسته فعلی جفت کنیم.

مثال ها:

خروجی دو دستور را محاسبه کنید:

 (ls foo; ls bar) > single-result.txt
 

ورود به دایرکتوری و انجام فرمان از آنجا و در حالی که دایرکتوری فعلی پوسته را تغییر نمی دهید:

 (cd target-directory && jar -xf ../my-jar)
 

2



انتشارات مرتبط


عملکرد را با یک خط در ~ / .bashrc بنویسید

دستور را در یک ترمینال بنویسید و نتیجه آن را در پایانی دیگر ببینید

چگونه چندین دستور را در ترمینال ترکیب کنیم؟

چگونه با یک درخواست به ترمینال (بدون استفاده از پرونده) چندین دستور پس از یکدیگر را اجرا کنیم؟

چگونه می توانم دستورات FTP را در یک خط اجرا کنم؟

چگونه می توانم با استفاده از همان آرگومان چندین دستور را اجرا کنم؟

چندین پوسته در یک پنجره

کدام یک بهتر است یا اکو؟

راه صحیح برای خاموش کردن اوبونتو با استفاده از خط فرمان چیست؟ [تکثیر]

چگونه می توان از avconv برای تبدیل چندین فایل در ترمینال استفاده کرد؟

[command-line] سوال برچسب


چگونه یک درایو USB یا خارجی را قالب بندی کنیم؟

برای قطع سریع صوتی / تصویری از چه چیزی استفاده کنیم

تفاوت بین دستورات systemctl و خدمات

به روزرسانی apt-get در بارگیری پرونده ها ، خطای "رفع نقص موقتی ..." انجام نشد

چگونه می توانم پیدا کنم که کامپیوتر من چقدر RAM دارد؟

متغیر را در پرونده .desktop تنظیم کنید

تفاوت بین ./ و sh برای اجرای یک فیلمنامه چیست؟

چه تفاوتی بین بسته های git و git-core وجود دارد؟

فضاهای کاری مانیتور دوگانه در اوبونتو 18.04

افزودن NOPASSWD در / etc / sudoers مؤثر نیست