"के रूप में लागू" संदर्भित करता है जो कुछ भी यह है कि इस प्रक्रिया को अपने "zeroth" कमांड लाइन तर्क में बैश डालता है शुरू, argv[0]
।
जब किसी प्रोग्राम को exec*()
syscalls के साथ शुरू किया जाता है , तो उन्हें वास्तव में प्रोग्राम से संबंधित बाइनरी फ़ाइल का नाम पता नहीं चलता है, लेकिन इसके बजाय कॉलिंग प्रक्रिया जो कुछ भी वहां है उसे डालने के लिए स्वतंत्र है। आमतौर पर, नाम, फाइलसिस्टम से लिया जाता है, इसलिए यदि आप दौड़ते हैं /bin/sh
, तो यही है। और अगर /bin/sh
बैश है, तो उसे सिम्लिंक होना जरूरी नहीं है, यह एक हार्ड लिंक या शेल प्रोग्राम की सिर्फ एक कॉपी हो सकती है।
"प्रोग्राम का नाम" सेट करने के एक उदाहरण के रूप में, बैश की exec
कमांड -a
विकल्प के साथ शून्य तर्क सेट कर सकती है। (हम पर्ल के साथ भी कर सकते हैं, या सीधे सी के साथ, आदि)
यहाँ, myname
एक सरल सी प्रोग्राम है जो सिर्फ अपने शून्य तर्क को प्रिंट करता है, नाम वह स्वयं देखता है:
$ ./myname
I am ./myname
$ (exec -a something ./myname )
I am something
$ mv ./myname somename
$ ln -s somename othername
$ ./somename
I am ./somename
$ ./othername
I am ./othername
स्रोत:
#include <stdio.h>
int main(int argc, char *argv[]) {
printf("I am %s\n", argv[0]);
return 0;
}
लेकिन, गिने-चुने सवालों के जवाब देने के लिए ...
(1 & 4) दौड़ने sh somescript
से sh
आपके जो कुछ भी है PATH
, वह चलेगा , /bin/sh
लेकिन संभवतः ऐसा ही कुछ/usr/xpg4/bin/sh
।
- यदि यह बैश है, तो यह POSIX मोड में चलता है, क्योंकि यह नाम देखता है
sh
।
- यदि यह Z शेल या कॉर्न शेल है, तो यह नाम देखता है
sh
, लेकिन यह "SH संगत" मोड में चलता है, जिसका उद्देश्य बॉर्न शेल संगत होना है और उन दोनों शेल में पूर्ण POSIX अनुरूप मोड के लिए अलग-अलग है। ।
- यह निश्चित रूप से अल्मक्विस्ट शेल, एक वास्तविक बॉर्न शेल या कुछ और हो सकता है।
(2 और 5) रनिंग bash somescript
नियमित बैश मोड में चलेगी (फिर से, यह निश्चित रूप से इस बात पर निर्भर करता है कि bash
आपके पास क्या PATH
है।)
(३) यहाँ, प्रोग्राम फ़ाइल के स्थान पर सीधे सिस्टम कॉल को स्क्रिप्ट का नाम दिया गया है। कर्नेल हैशबैंग लाइन पढ़ता है और स्क्रिप्ट चलाने के लिए इसका उपयोग करता है।
(६) यह जटिल है। यह (3) के समान है, लेकिन प्रोग्राम शुरू करने के लिए सिस्टम कॉल विफल रहता है ( ENOEXEC (Exec format error)
), क्योंकि कोई हैशबैंग लाइन नहीं है। आगे क्या होता है यह इस बात पर निर्भर करता है कि आप जो शेल चला रहे हैं वह पॉसिक्स मोड में ही है। POSIX के लिए आवश्यक है कि POSIX-conformant शेल एक विशिष्ट अंदाज में प्रतिक्रिया के साथ व्यवहार करे ENOEXEC
। हालांकि, "कुछ कमांड एक शेल के पास होने के बराबर है", जिसका मतलब है कि अलग-अलग गोले अलग-अलग काम करते हैं।
- बॉर्न अगेन शेल अपने पहले कमांड-लाइन तर्क के रूप में स्क्रिप्ट के नाम के साथ उसी मोड में फिर से चलाता है । अपने POSIX- अनुरूप मोड में, यह निश्चित रूप से अपने POSIX- अनुरूप मोड में चल रहा है, इस प्रकार POSIX- अनुरूप शेल को लागू करने के लिए POSIX आवश्यकता का पालन करता है।
- Z शेल, अल्मक्विस्ट शेल, और कॉर्न शेल
/bin/sh
स्क्रिप्ट के नाम के साथ अन्य तर्कों से पहले अपने पहले कमांड-लाइन तर्क के रूप में चलते हैं। Z शेल, अल्मक्विस्ट शेल, और कॉर्न शेल (POSIX-conformant shell) को लागू करने का प्रयास करने के लिए कहते हैं कि /bin/sh
कार्यक्रम एक है।