2009-03-14 12 views
32

बैश स्क्रिप्ट बहुत उपयोगी हैं और बहुत सारे प्रोग्रामिंग समय को बचा सकते हैं। तो आप सी ++ प्रोग्राम में बैश स्क्रिप्ट कैसे शुरू करते हैं? इसके अलावा यदि आप जानते हैं कि उपयोगकर्ता को सुपर-उपयोगकर्ता कैसे बनाया जाए जो भी अच्छा होगा। धन्यवाद!सी ++ प्रोग्राम से एक बैश स्क्रिप्ट कैसे चलाएं

उत्तर

46

system फ़ंक्शन का उपयोग करें।

system("myfile.sh"); // myfile.sh should be chmod +x 
+3

धन्यवाद लेकिन आप इसे शामिल करना भूल गए: सिस्टम ("./ myfile.sh"); – Kredns

+0

यह बिना काम करेगा। अगर फ़ोल्डर आपके पथ में है :) –

+2

वर्तमान निर्देशिका '.' * आपके' $ PATH' में नहीं होनी चाहिए। –

13
#include <stdio.h> 
#include <stdlib.h> 

// .... 


system("my_bash_script.sh"); 
+3

क्या होगा यदि बैश स्क्रिप्ट को कुछ पाठ को tty में गूंजना था? जैसे क्या होगा यदि यह एक "बिल्ली" था? क्या सी प्रोग्राम में आउटपुट हो सकता है? –

9

केवल मानक अनिवार्य कार्यान्वयन निर्भर रास्ता stdlib.h से system() समारोह का प्रयोग है।

यदि आप जानते हैं कि उपयोगकर्ता को सुपर-उपयोगकर्ता कैसे बनें, तो यह भी अच्छा होगा।

क्या आप स्क्रिप्ट को सुपर-उपयोगकर्ता के रूप में चलाने के लिए चाहते हैं या आप सी निष्पादन योग्य के विशेषाधिकारों को ऊपर उठाना चाहते हैं? पूर्व को sudo के साथ किया जा सकता है लेकिन sudo का उपयोग करके आप कुछ जान सकते हैं इससे पहले कि आपको कुछ जानकारियों की आवश्यकता हो।

4

StackOverflow: How to execute a command and get output of command within C++?

StackOverflow: (Using fork,pipe,select): ...nobody does things the hard way any more...

इसके अलावा, अगर आप जानते हैं कि कैसे उपयोगकर्ता सुपर उपयोगकर्ता वह भी अच्छा होगा बन बनाने के लिए। धन्यवाद!

sudo। सु। chmod 04500. (setuid() & seteuid(), लेकिन उन्हें पहले से ही रूट होने की आवश्यकता है। ई..जी। chmod'ed 04 ***।)

देखभाल करें। ये "रोचक" सुरक्षा छेद खोल सकते हैं ...

आप जो कर रहे हैं उसके आधार पर, आपको रूट की आवश्यकता नहीं हो सकती है। (उदाहरण के लिए: मैं अक्सर chmod/chown/dev डिवाइस (सीरियल पोर्ट, आदि) (सूडो रूट के तहत) तो मैं उन्हें रूट के बिना अपने सॉफ़्टवेयर से उपयोग कर सकता हूं। दूसरी ओर, यह नहीं है कर्नेल मॉड्यूल लोड/अनलोडिंग करते समय बहुत अच्छी तरह से काम करें ...)

0

चूंकि यह एक बहुत पुराना सवाल है, और यह विधि नहीं जोड़ा गया है (system() कॉल फ़ंक्शन से अलग) मुझे लगता है कि यह बनाना शामिल करना उपयोगी होगा सी बाइनरी के साथ खोल स्क्रिप्ट। शेल कोड file.c स्रोत फ़ाइल के अंदर रखा जाएगा। यहाँ कोड का एक उदाहरण है:

#include <stdio.h> 
#include <stdlib.h> 

#define SHELLSCRIPT "\ 
#/bin/bash \n\ 
echo -e \"\" \n\ 
echo -e \"This is a test shell script inside C code!!\" \n\ 
read -p \"press <enter> to continue\" \n\ 
clear\ 
" 

int main() { 

system(SHELLSCRIPT); 
return 0; 
} 

मूल रूप से, संक्षेप (यमक इरादा), हम, स्क्रिप्ट नाम को परिभाषित कर रहे, स्क्रिप्ट बाहर fleshing उन्हें दोहरे उद्धरण चिह्नों में संलग्न (उचित पलायन डालने जबकि दोहरे उद्धरण चिह्नों की अनदेखी करने में शेल कोड में), और फिर उस स्क्रिप्ट के नाम को कॉल करना, जो इस उदाहरण में फ़ंक्शन main() में फ़ंक्शन का उपयोग कर रहा है।

संबंधित मुद्दे