su

2010-09-16 7 views
10

कमांड में बैश फ़ंक्शन चलाना मेरी बैश स्क्रिप्ट में, मैं कुछ कमांड को किसी अन्य उपयोगकर्ता के रूप में निष्पादित करता हूं। मैं su का उपयोग कर एक बैश फ़ंक्शन को कॉल करना चाहता हूं।su

my_function() 
{ 
    do_something 
} 

su username -c "my_function" 

उपर्युक्त स्क्रिप्ट काम नहीं करती है। बेशक, my_functionsu के अंदर परिभाषित नहीं किया गया है। मेरे पास एक विचार है कि फ़ंक्शन को एक अलग फ़ाइल में रखना है। क्या आपके पास एक बेहतर विचार है जो एक और फाइल बनाने से बचाता है?

उत्तर

11

आप इसे subshell के लिए उपलब्ध बनाने के लिए समारोह निर्यात कर सकते हैं:

export -f my_function 
su username -c "my_function" 
2

आप अपने सिस्टम में 'सुडो' सक्षम कर सकते हैं और इसके बजाय इसका उपयोग कर सकते हैं।

+0

सूडो सक्षम नहीं है। सिस्टम व्यवस्थापक इसे सक्षम नहीं करेगा। –

+2

आप इसे 'सूडो' के साथ कैसे करते हैं? एक साधारण 'सुडो my_function' काम नहीं करेगा, उस समारोह को निर्यात करने के बाद भी। – michas

1

आपके पास उसी क्षेत्र में कार्य होना चाहिए जहां आप इसका उपयोग करते हैं। तो या तो समारोह को उद्धरण के अंदर रखें, या फ़ंक्शन को एक अलग स्क्रिप्ट पर रखें, जिसे आप su -c के साथ चलाते हैं।

+0

मैं su के बाहर एक ही स्क्रिप्ट को कॉल करना चाहता हूं। दूसरी लिपि भी मेरा विचार था। –

0

एक और तरीका मामलों करने जा रहे हों और मार डाला स्क्रिप्ट के लिए एक पैरामीटर गुजर। उदाहरण हो सकता है: पहले "script.sh" नामक फ़ाइल बनाएं। तो यह इस कोड सम्मिलित करें: ऊपर दिए गए कोड को जोड़ने के बाद

#!/bin/sh 

my_function() { 
    echo "this is my function." 
} 

my_second_function() { 
    echo "this is my second function." 
} 

case "$1" in 
    'do_my_function') 
     my_function 
     ;; 
    'do_my_second_function') 
     my_second_function 
     ;; 
    *) #default execute 
     my_function 
esac 

कार्रवाई में यह देखने के लिए इन आदेशों को चलाने:

[email protected]:/# chmod +x script.sh #This will make the file executable 
[email protected]:/# ./script.sh   #This will run the script without any parameters, triggering the default action.   
this is my function. 
[email protected]:/# ./script.sh do_my_second_function #Executing the script with parameter 
this function is my second one. 
[email protected]:/# 

यह काम करने के लिए के रूप में आप की आवश्यकता तुम सिर्फ चलाने की आवश्यकता होगी

su username -c '/path/to/script.sh do_my_second_function' 

और सब कुछ ठीक काम करना चाहिए। उम्मीद है कि यह मदद करता है :)

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