कमांड 'सोर्स' को 'इन्क्लूड' स्टेटमेंट की तरह समझें। यह तर्क की सामग्री लेता है और इसे चलाता है जैसे कि इसे सीधे चलाया गया था। इस स्थिति में आपका कमांड 'run.sh' के तर्क के साथ 'source' है और run.sh को ठीक वैसे ही निष्पादित किया जाता है, जैसे आपने run.sh की सामग्री को अपनी कमांड लाइन में टाइप किया था।
जब आप './run.sh' चलाते हैं, './run.sh' आपकी आज्ञा है और इसका कोई तर्क नहीं है। चूंकि यह फ़ाइल सादा-पाठ है और बाइनरी नहीं है, इसलिए आपका शेल शेलबैंग में एक दुभाषिया की तलाश में है (पहली पंक्ति में '#') और '/ बिन / बैश' पाता है। तो आपका शेल फिर बैश का एक नया उदाहरण शुरू करता है और रन.श की सामग्री को इस नए इंस्टेंस के अंदर चलाया जाता है।
पहले उदाहरण में, जब बैश 'एक्जिट' कमांड पर पहुंचता है, तो इसे ठीक उसी तरह निष्पादित किया जाता है, जैसे आपने इसे कमांड लाइन में टाइप किया था। दूसरे उदाहरणों में इसे bash प्रक्रिया में निष्पादित किया जाता है, जब आपका शेल प्रारंभ हुआ, इस प्रकार केवल bash के इस उदाहरण को एक 'एग्जिट' कमांड प्राप्त होती है।
जब आप एक पंक्ति को बैश में टाइप करते हैं, तो पहले स्थान के पहले कुछ भी एक कमांड के रूप में व्यवहार किया जाता है और कुछ भी जो निम्न प्रकार से तर्क के रूप में माना जाता है। आदेश '।' 'स्रोत' का एक उपनाम है। जब तुम दौड़ते हो ’। run.sh 'the'। ' यह अपने आप में एक आदेश है क्योंकि यह अंतरिक्ष से तर्क से अलग है। जब आप './run.sh' चलाते हैं, तो आपका आदेश '/ .run.sh' और '' है। 'के साथ चलाने के लिए रिश्तेदार पथ का हिस्सा है।' अपने वर्तमान फ़ोल्डर का प्रतिनिधित्व।
$- = *i*
काम करता है?