जवाबों:
sh
प्रोग्राम sh
को इंटरप्रेटर कहते हैं और -c
ध्वज का अर्थ है इस प्रोग्राम द्वारा व्याख्या की गई निम्न कमांड को निष्पादित करें।
उबंटू में, sh
आमतौर पर सहानुभूति होती है /bin/dash
, जिसका अर्थ है कि यदि आप sh -c
डैश शेल के साथ कमांड निष्पादित करते हैं, तो इसका उपयोग कमांड को बैश करने के बजाय निष्पादित करने के लिए किया जाएगा। के साथ बुलाया शेल sh
सिम्लिंक पर निर्भर करता है - आप के साथ पता लगा सकते हैं readlink -e $(which sh)
। sh -c
जब आप बैश के बजाय विशेष रूप से उस शेल के साथ कमांड निष्पादित करना चाहते हैं तो आपको इसका उपयोग करना चाहिए ।
आप -c
अन्य व्याख्याताओं के साथ भी इस वाक्यविन्यास ( ध्वज) का उपयोग कर सकते हैं । इसका एक क्लासिक उपयोग (@wwinksl द्वारा इंगित किया गया है कि सुडो के साथ काम न करने की पुनर्निर्देशन की समस्या के आसपास जाना है (यहां आप उपयोग कर सकते हैं bash -c
या sh -c
)
sudo sh -c 'echo "foo" > /home/bar'
फ़ाइल लिखेंगे bar
पाठ वाले foo
को /home/
जबकि, sudo echo "foo" > /home/bar
विफल रहता है के रूप में बहुत अच्छी तरह से यहाँ समझाया
कमांड स्ट्रिंग के चारों ओर 'सिंगल कोट्स' का उपयोग करना महत्वपूर्ण है, अन्यथा वर्तमान शेल आपके द्वारा इंटरप्रेटर को भेजे जाने से पहले इसे विस्तारित करने का प्रयास करेगा
उदाहरण के लिए (अजगर के साथ जब तक मैं एक कमांड के बारे में सोचता हूं जो डैश में अलग-अलग परिणाम देगा ...)
$ python3 -c print (35/7)
bash: syntax error near unexpected token `('
$ python3 -c 'print (35/7)'
5.0
-c
तर्क है:
मानक इनपुट के बजाय कमांड_स्ट्रिंग ऑपरेंड से कमांड पढ़ें। विशेष पैरामीटर 0 को कमांड =name ऑपरेंड से और पोजीशन पैरामीटर ($ 1, $ 2, आदि) को शेष तर्क ऑपरेंड से सेट किया जाएगा।
sh
आर्गुमेंट्स के अन्य विवरणों को चलाकर पाया जा सकता है:
$ man sh
एक तर्क के रूप में स्ट्रिंग का उपयोग करने का एक उदाहरण है:
$ sh -c "echo This is a test string"
यह एक अधिक विस्तृत sh -c
उदाहरण है। यह Google ड्राइव से एक दस्तावेज़ डाउनलोड करेगा और इसे डेस्कटॉप पर संपादन के लिए खोल देगा:
$ sh -c "wget 'https://docs.google.com/document/u/0/d/1jcBtdlMx0f4BhCmAmnIViIy4WN4oRevWFRzse-P00j0/export?format=docx' -O test.docx && xdg-open test.docx 2>/dev/null"
sh -c
( उबंटू में) एक गैर-लॉगिन , गैर-संवादात्मक सत्र को जन्म देता है ।sh
dash
आदेश निम्नलिखित है कि खोल सत्र में चलाया जाएगा, यह तर्क (स्थितीय पैरामीटर) के रूप में 0 (इलाज किया जाएगा ARGV0
), और कहा कि आदेश के लिए तर्क (के रूप में शेष भाग ARGV0
), 1 से शुरू ( ARGV1
, ARGV2
, ...)।
आप इस तरह के सत्र में चलने के लिए अनुमति दी गई विशिष्ट शेल विशेषताओं का भी उपयोग कर सकते हैं। उदाहरण के लिए कमांड को अलग-अलग कमांड का उपयोग करके ;
, कमांड ग्रुपिंग का उपयोग करते हुए {}
, एक और उपधारा के साथ स्पॉन करें ()
, और इसी तरह। इनका उपयोग पूर्व में उल्लिखित तर्क की परिभाषा / उदाहरणों को थोड़ा बदल सकता है।
बस ध्यान देने योग्य बात यह है कि जो सुविधाएँ केवल इंटरएक्टिव शेल के लिए विशिष्ट हैं (डिफ़ॉल्ट रूप से), जैसे इतिहास विस्तार, source
-ing ~/.bashrc
और /etc/bash.bashrc
आदि इस सत्र में उपलब्ध नहीं होंगे क्योंकि यह गैर-इंटरैक्टिव है । आप -i
विकल्प का उपयोग करके एक इंटरैक्टिव सत्र व्यवहार (लगभग) का अनुकरण कर सकते हैं :
sh -ic ...
इसी तरह, सुविधाओं है कि के लिए विशिष्ट हैं लॉगिन केवल (डिफ़ॉल्ट रूप से) के गोले जैसे source
की -ing ~/.profile
(दिया ~/.bash_profile
और ~/.bash_login
मौजूद नहीं है) और /etc/profile
के रूप में खोल एक है नहीं किया जाएगा गैर लॉगिन खोल। आप -l
विकल्प का उपयोग करके लॉगिन-शेल्स व्यवहार का अनुकरण कर सकते हैं :
sh -lc ...
लॉगिन और इंटरैक्टिव सत्र दोनों का अनुकरण करने के लिए:
sh -lic ...
sh -c
? अतिरिक्त अच्छा होगा यदि यह स्थितिगत मापदंडों के असाइनमेंट को प्रदर्शित करता है जो के-c
हिस्से में उल्लिखित हैंman sh
।