चाउर $ USER का उपयोग करना: bash script के अंदर $ USER


10

एक छोटी सी मारपीट स्क्रिप्ट में मैं चला रहा हूं जो एक नई निर्देशिका बनाने का प्रयास कर रहा है। मैंने जोड़ लिया है:

sudo chown $USER:$USER /var/www/$sitename
sudo chmod 775 /var/www/$sitename

लाइन के बाद जहां मैं mkdir ( sudo mkdir /var/www/$sitename)।

किसी कारणवश चांस नहीं चल रहा है। मैं इसे मैन्युअल रूप से निष्पादित कर सकता हूं लेकिन जब फ़ाइल में लिखा जाता है तो यह काम नहीं करता है। मैंने देखा है कि "चॉक" को "mkdir" और "chmod" के समान रंग में हाइलाइट नहीं किया गया है, लेकिन मैं अपनी समस्या का पता नहीं लगा सकता।

यहाँ काम क्यों नहीं करता है?

क्या यह एक मुद्दा है $USER:$USER?

EDIT यहाँ पूरी स्क्रिप्ट है। जो भी नॉन रूट यूजर स्क्रिप्ट निष्पादित करेगा, मैं फाइल को कैसे चाउंगा?

#!/bin/sh
#!/bin/bash
# New Site

cd /etc/apache2/sites-available/
echo "New site name (test.my):"
read sitename
echo "<VirtualHost *:80>

        ServerAdmin admin@$sitename

    ServerName $sitename

        ServerAlias $sitename

    DocumentRoot /var/www/$sitename

        <Directory />
                Options FollowSymLinks
                AllowOverride All
        </Directory>
        <Directory /var/www/$sitename>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride All
                Order allow,deny
                allow from all
        </Directory>

        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined


</VirtualHost>" > $sitename.conf
sudo mkdir /var/www/$sitename
sudo chown $USER:$USER /var/www/$sitename
echo USER is $USER
sudo chmod 775 /var/www/$sitename
sudo a2ensite $sitename.conf
sudo apachectl restart
echo "New site created"

1
क्या $ USER नाम का कोई समूह है? getent group $USER
सायरस

1
$USERचर इंटरैक्टिव लॉगिन के दौरान सेट किया गया है। आप अपनी स्क्रिप्ट कैसे चलाते हैं - लॉगिन सत्र से या क्रोन से या डेमन से?
मेरा आधार

1
जांचें कि क्या USER चर भी स्क्रिप्ट द्वारा देखा गया है। यदि आप अपनी स्क्रिप्ट में एक पंक्ति जोड़ते हैं जो कहती है echo USER is $USER, यह क्या प्रिंट करता है?
मार्क प्लॉटनिक

, जाहिर है @MarkPlotnick USER is root। आपके द्वारा किए गए संपादन से आपको लगता है कि आप समझा सकते हैं कि गैर-रूट उपयोगकर्ता को स्क्रिप्ट को निष्पादित करने के लिए फ़ाइल को कैसे चेंज करना है?
9

@ मैय्यत मैं इसे टर्मिनल से मैन्युअल रूप से चलाता हूं।
ब्रासऐप यंत्र Brass

जवाबों:


9

यदि, किसी कारण से, $USERसेट नहीं किया गया है, तो आप idवास्तविक उपयोगकर्ता की पहचान प्राप्त करने के लिए कमांड का उपयोग कर सकते हैं । तो पहली बार जब आप $USERचर का उपयोग करते हैं, तो आप डिफ़ॉल्ट मान की आपूर्ति के लिए शेल विस्तार का उपयोग कर सकते हैं। chownअपनी स्क्रिप्ट में लाइन को इसमें बदलें :

sudo chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitename

यदि USERयह चलाए जाने पर खाली या परेशान है, तो bash USERचर को आउटपुट पर सेट कर देगा/usr/bin/id -run


4

जब मैं sudoइसके साथ अपनी स्क्रिप्ट को कॉल करता हूं, तो यह $USERरूट हो जाएगा।

$ sudo ./myscript.sh

मैंने कोशिश की, chown ${USER:=$(/usr/bin/id -run)}:$USER /var/www/$sitenameलेकिन यह अभी भी रूट लौटाएगा।

मैंने पाया कि अगर मैं उसके whoसाथ प्रयोग करता awkथा तो मुझे वर्तमान उपयोगकर्ता प्राप्त करने में सक्षम था जो स्क्रिप्ट को बुलाता था sudo

currentuser=$(who | awk '{print $1}')}
chown -R $currentuser:$currentuser /var/www/$sitename`

1
currentuserमल्टीलाइन उपयोगकर्ताओं के साथ सेटिंग (कुछ समय) को रोकने के लिए , $(who | awk 'NR==1{print $1}')इसके बजाय उपयोग करें ।
इल्यूमिनेटर

मैं अपने उपयोगकर्ता को बदलने / usr करने की कोशिश कर रहा हूं: chown -R $currentuser:$currentuser /usr - काम नहीं करता है - फिर भी रूट दिखाता है: रूट
सैम-टी

2

समस्या को सरल बनाने के लिए और चूँकि आपके वेरिएबल का नाम परिवर्तन हो रहा है, आप उपयोगकर्ता नाम का वैरिएबल क्यों नहीं पढ़ते हैं?

इसके साथ ही आप यह सुनिश्चित करेंगे कि स्क्रिप्ट निष्पादन पर्यावरण चर पर निर्भर नहीं है, जिस तरह से स्क्रिप्ट निष्पादित की गई है।


0

मुझे लगता है कि केवल एक छोटी सी गलती है। sudo कमांड को निष्पादित करने के लिए एक नया शेल खोलता है और sudo के बाद उपयोगकर्ता रूट होता है। तो शायद आपको कुछ इस तरह का उपयोग करना चाहिए:

MyUser $ user =

सूदो चने $ मायसर: $ मायसर

जैसा कि मुझे लगता है कि MYUSER प्रणालीगत अधिलेखित नहीं है और काम करेगा।


1
कमांड निष्पादित होने से पहले चर का मूल्यांकन किया जाता है, इसलिए आपके सुझाए गए विकल्प से कोई फर्क नहीं पड़ेगा। (इसे echo chown...देखें और देखें।)
रोआमा
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.