ডাবল ব্যবহার করে inside ব্যবহারকারী: ash ব্যবহারকারীর স্ক্রিপ্টের ভিতরে


10

একটি ছোট বাশ স্ক্রিপ্টে আমি চলছে আমি তৈরি হওয়া একটি নতুন ডিরেক্টরি ছড়িয়ে দেওয়ার চেষ্টা করছি। আমি যোগ করেছি:

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

লাইন পরে আমি যেখানে mkdir ( sudo mkdir /var/www/$sitename)।

কিছু কারণে শাবক কার্যকর হচ্ছে না। আমি এটি ম্যানুয়ালি কার্যকর করতে পারি তবে ফাইলে যখন লেখা থাকে এটি কাজ করে না। আমি লক্ষ্য করেছি যে "ছাউনী" "এমকেডির" এবং "ছোমড" এর একই রঙে হাইলাইট করা হয়নি তবে আমি আমার সমস্যাটি বুঝতে পারি না।

কেন এখানে কাজ বন্ধ না?

এটা কোন সমস্যা আছে $USER:$USER?

সম্পাদনা এখানে সম্পূর্ণ স্ক্রিপ্ট। যে কোনও নন-রুট ব্যবহারকারী স্ক্রিপ্টটি সম্পাদন করলেন আমি কীভাবে ফাইলটিকে ছুঁড়ে দেব?

#!/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ইন্টারেক্টিভ লগইন চলাকালীন পরিবর্তনশীল সেট করা হয়। আপনি কীভাবে আপনার স্ক্রিপ্টটি চালাবেন - লগইন সেশন থেকে বা ক্রোন ব্যবহার করে বা ডেমন থেকে?
myaut

1
USER ভেরিয়েবল এমনকি স্ক্রিপ্ট দ্বারা দেখা হয়েছে কিনা তা পরীক্ষা করুন। আপনি যদি আপনার স্ক্রিপ্টে একটি লাইন যুক্ত করেন যা বলে যে echo USER is $USERএটি কী মুদ্রণ করে?
মার্ক প্লটনিক

স্পষ্টভাবে, মার্ক মার্ক্লটনিক USER is root,। আমি যে সম্পাদনা করেছি তা দিয়ে আপনি কি মনে করেন যে কীভাবে ফাইলটি মুখ্য করবেন যার মূলটি নিরঙ্কুশর ব্যবহারকারী স্ক্রিপ্টটি কার্যকর করেন?
ব্রাস অ্যাপারাটাস

@ মিয়াউট আমি টার্মিনাল থেকে এটি ম্যানুয়ালি চালাই।
ব্রাস অ্যাপারাটাস

উত্তর:


9

যদি কোনও কারণে $USERসেট না করা থাকে তবে আপনি idপ্রকৃত ব্যবহারকারীর পরিচয় পেতে কমান্ডটি ব্যবহার করতে পারেন । সুতরাং প্রথমবার আপনি যখন $USERভেরিয়েবলটি ব্যবহার করেন , আপনি শেল এক্সপেনশনটি ডিফল্ট মান সরবরাহ করতে পারেন। chownআপনার স্ক্রিপ্টের লাইনটি এতে পরিবর্তন করুন :

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

USERএটি চলাকালীন যদি খালি বা আনসেট থাকে, বাশ 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 - কাজ করে না - এখনও মূল দেখায়: মূল
Sam-T

2

সমস্যাটি সহজ করার জন্য এবং যেহেতু আপনি ভেরিয়েবল সিটনেম পেয়ে যাচ্ছেন, আপনি কেন একটি ব্যবহারকারীর নাম পরিবর্তনশীল পড়বেন না?

এটির মাধ্যমে আপনি নিশ্চিত হয়ে উঠবেন যে স্ক্রিপ্ট কার্যকর করা সেই স্ক্রিপ্টটি কার্যকর করার পদ্ধতি পরিবেশগত পরিবর্তনশীলগুলির উপর নির্ভরশীল নয়।


0

আমি মনে করি কেবল একটি ছোট্ট দোষ আছে। কমান্ডটি কার্যকর করার জন্য sudo একটি নতুন শেল খোলে এবং sudo এর পরে ব্যবহারকারী রুট হয়। সুতরাং আপনার এই জাতীয় কিছু ব্যবহার করা উচিত:

MYUSER $ user =

sudo chown $ MYUSER: Y MYUSER

যেহেতু আমি মনে করি মাইউসার সিস্টেমফিজিফিক ওভাররাইটিন নয় এবং কাজ করবে।


1
কমান্ড কার্যকর হওয়ার আগে ভেরিয়েবলটি মূল্যায়ন করা হয়, সুতরাং আপনার প্রস্তাবিত বিকল্প কোনও পার্থক্য করবে না। (এটি দিয়ে দেখুন echo chown...এবং দেখুন))
রোয়াইমা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.