. executableসিনট্যাক্স কোন এক্সিকিউটেবল সাথে কাজ করে না (অথবা এটা আছে?)। পরিবর্তে, এটি sourceঅন্তর্নির্মিত ব্যাশের জন্য একটি উপনাম । সুতরাং পার্থক্যটি বেশিরভাগ ক্ষেত্রে বাশ স্ক্রিপ্টগুলির সাথে প্রাসঙ্গিক এবং সত্যটি হ'ল তারা সম্পূর্ণ আলাদা জিনিস :)
./executableএক্সিকিউটেবলকে "সাধারণভাবে" চালাতে বলে। ./বর্তমানের পথে একটি আপেক্ষিক রেফারেন্স। এটি শেল (বাশ) থাকাটিকে এড়ানোর ফলে কোনও ডিরেক্টরিতে এক্সিকিউটেবলকে সনাক্ত করার চেষ্টা করা হয় $PATH(এটি যদি আপনি কমান্ডের সাথে কোনও পথ নির্দিষ্ট না করে থাকেন)। আপনি কেবল না পারার কারণটি executableহ'ল সুরক্ষার একটি; মনে করুন আপনার একটি সংরক্ষণাগার আপনি ডাউনলোড কমপ্রেস এবং এটি একটি দূষিত সংস্করণ রয়েছে ls। এটি যদি আপনার বর্তমান ডিরেক্টরি থেকে সরাসরি চলে যায় তবে আপনি উপলব্ধি না করেই সংস্করণটি চালাবেন।
অন্যদিকে, . executableবলছে "উত্স একটি নাম ফাইল executable"। যেহেতু আপনি সরাসরি ফাইলটির নামকরণ করছেন এবং এটি সত্যিই কার্যকর করার দরকার নেই, তাই AT প্যাথের জন্য সুরক্ষা নিষেধাজ্ঞা প্রযোজ্য নয়। সোর্সিং শেল স্ক্রিপ্টগুলি কেবল "চালিত" হবে (বা মনে হয়)। এটি যা করে তা হ'ল:
source filename [arguments]
Read and execute commands from filename in the current shell
environment and return the exit status of the last command exe‐
cuted from filename.
সুতরাং ... মৃত্যুদন্ড কার্যকর করা এবং উত্সর্গকরণের মধ্যে আসলে কী পার্থক্য? একই শেল স্ক্রিপ্টটি ধরে ./scriptনিলে, এটি কার্যকর করা ( ) কার্যকর করা একটি নতুন শেল তৈরি করবে, সেই শেলের ভিতরে স্ক্রিপ্টটি চালাবে এবং যখন স্ক্রিপ্টটি প্রস্থান করবে তখন সেই শেলটি বন্ধ করে প্যারেন্ট শেলটিতে ফিরে আসবে। বাস্তবে, এটি bashস্ক্রিপ্টটি কার্যকর করতে একটি নতুন প্রক্রিয়া শুরু করবে )।
( . script) বর্তমান শেলটি ফাইল থেকে কমান্ডগুলি পড়ার জন্য যেমন সেগুলি কমান্ড লাইনে টাইপ করা হচ্ছে will এখানে কোনও নতুন শেল বিস্তৃত হয়নি।
এটি কীভাবে আচরণ করে তা দেখার একটি খুব সহজ উপায় হ'ল কেবল একটি স্ক্রিপ্ট লিখতে exit। যদি আপনি ./scriptএটি করেন তবে কিছুই ঘটবে না বলে মনে হচ্ছে, এটি একটি নতুন শেল প্রক্রিয়া শুরু হওয়ার কারণে, exitকমান্ডটি নতুন শেলটি থেকে বেরিয়ে আসে এবং আপনার বর্তমান শেলটি ক্ষতিগ্রস্থ হয়নি।
আপনি যদি . script, আপনার বর্তমান টার্মিনালটি বন্ধ হবে, কারণ exitবর্তমান শেলটিতে কমান্ডটি চলমান। সুতরাং এটি exitকমান্ড প্রম্পটে টাইপ করার সমতুল্য ।