2010-08-06 10 views
21

क्या मैं एक स्क्रिप्ट के बीच में/su उपयोगकर्ता बदल सकता हूं?क्या मैं बैश स्क्रिप्ट के बीच में 'su' चला सकता हूं?

if [ "$user" == "" ]; then 
    echo "Enter the table name"; 
    read user 
fi 

gunzip * 
chown postgres * 
su postgres 
dropdb $user 
psql -c "create database $user with encoding 'unicode';" -U dbname template1 
psql -d $user -f *.sql 
+0

संभव डुप्लिकेट [मैं कैसे सु कि उपयोगकर्ता के रूप में पार्टी स्क्रिप्ट के बाकी निष्पादित करने के लिए प्रयोग करते हैं?] (Http://stackoverflow.com/questions/1988249/how-do- मैं उपयोग-सु-टू-निष्पादित-आराम के-बैश स्क्रिप्ट के रूप में है कि उपयोगकर्ता) –

उत्तर

37

आप कर सकते हैं, लेकिन बाद में कमांड पोस्टग्रेज़ के रूप में नहीं चलाएंगे। इसके बजाय, कार्य करें:

su postgres -c 'dropdb $user' 

-c झंडा उपयोगकर्ता के रूप में एक कमांड (man su देखें) चलाता है।

+0

धन्यवाद @Mark Trapp – Radek

+6

आप दोहरे उद्धरण चिह्नों का उपयोग करना चाहते हैं: 'सु -c postgres "dropdb $ user" ' –

+1

यदि समापन उद्धरण दूसरी पंक्ति पर आता है तो आप कई लाइनें डाल सकते हैं। उस मामले में उद्धरण का ख्याल रखना। –

4

नहीं आप नहीं कर सकते। या कम से कम ... आप su कर सकते हैं लेकिन सु उस बिंदु पर बस एक नया खोल खोल देगा और जब यह किया जाता है तो यह बाकी लिपि के साथ जारी रहेगा। इसके चारों ओर

एक तरह से su -c 'some command'

9

उपयोग करने के लिए यह पसंद नहीं है। su एक प्रक्रिया का आह्वान करेगा, जो एक खोल के लिए डिफ़ॉल्ट है। कमांड लाइन पर, यह खोल इंटरैक्टिव होगा, इसलिए आप कमांड दर्ज कर सकते हैं। एक स्क्रिप्ट के संदर्भ में, खोल तुरंत खत्म हो जाएगा (क्योंकि इसमें कुछ भी नहीं है)।

su user -c command 

command साथ user के रूप में क्रियान्वित की जाएगी - su सफल होता है, जो आम तौर पर केवल पासवर्ड से कम उन या रूट के रूप में स्क्रिप्ट चलाने जब साथ मामला है, तो।

एक बेहतर और अधिक बढ़िया दृष्टिकोण के लिए sudo का उपयोग करें। जब आप रूट के रूप में चलाने के लिए और आप किसी अन्य उपयोगकर्ता के रूप में स्क्रिप्ट चलाना चाहते

2

एक और दिलचस्प विचार है कि मैं आज सुना है, स्क्रिप्ट पर एक पुनरावर्ती कॉल करना है। नीचे दिए गए उदाहरण देखें:

मैं स्क्रिप्ट "my_script" चला रहा हूँ "रूट" के रूप में और स्क्रिप्ट उपयोगकर्ता के रूप में "raamee"


#!/bin/bash 

#Script name is: my_script 

user=`whoami` 

if [ "$user" == "root" ]; then 
    # As suggested by glenn jackman. Since I don't have anything to run once 
    # switching the user, I can modify the next line to: 
    # exec sudo -u raamee my_script and reuse the same process 
    sudo -u raamee my_script 
fi 

if [ "$user" == "raamee" ]; then 
    #put here the commands you want to perform 
    do_command_1 
    do_command_2 
    do_command_3 
fi 
+1

आप "raamee" के बाद कोई लेना देना नहीं है, तो काम करता है, तो आप कर सकते हैं: 'कार्यकारी sudo -u raamee my_script' - यह है कि यह चारों ओर लटक रखने के बजाय मौजूदा प्रक्रिया बदल देता है। –

+0

चालाक, लेकिन यहां एक दस्तावेज़ सरल है (मेरा जवाब देखें)।इस के साथ ध्यान में रखने की –

+0

एक बात sudo'd उपयोगकर्ता (यदि नहीं जड़) स्क्रिप्ट खुद को चलाने के लिए अनुमति है की जरूरत है। –

13

आप एक here document उपयोग कर सकते हैं कई su एम्बेड करने के लिए चलाना चाहते हैं अपनी स्क्रिप्ट में कमांड:

if [ "$user" == "" ]; then 
    echo "Enter the table name"; 
    read user 
fi 

gunzip * 
chown postgres * 
su postgres <<EOSU 
dropdb $user 
psql -c "create database $user with encoding 'unicode';" -U dbname template1 
psql -d $user -f *.sql 
EOSU 
+0

सावधान रहें, मुझे लगता है कि बैकटिक जैसे कुछ पात्रों को बचने की ज़रूरत है यदि आप उन्हें यहां दस्तावेज़ में डाल देते हैं। –

1

, नीचे दिए गए सवाल में जवाब का संदर्भ लें

आप उत्तर में उल्लिखित < < ईओएफ और ईओएफ के बीच लिख सकते हैं।

#!/bin/bash 
whoami 
sudo -u someuser bash << EOF 
echo "In" 
whoami 
EOF 
echo "Out" 
whoami 

How do I use su to execute the rest of the bash script as that user?

की
+0

कुछ-उपयोगकर्ता के पर्यावरण को प्राप्त करने के लिए सुडो को जोड़ें। –

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

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