আমি কীভাবে অন্য ব্যবহারকারী হিসাবে চালাতে পারি?


20

এটি ব্যাশ কোড যা চালানো উচিত। সুতরাং প্রথমে এটি ব্যবহারকারীকে ওপেনপ্রজেক্টে প্রতিস্থাপিত করে এবং সমস্ত কোড চালায় তার চেয়ে বেশি:

su openproject -c "bash -l" 
cd ~/openproject
git checkout Gemfile.lock
git pull

bundle install
RAILS_ENV="production" bundle exec rake db:migrate
RAILS_ENV="production" bundle exec rake db:seed
RAILS_ENV="production" bundle exec rake assets:precompile

আমি উপরের স্ক্রিপ্টটি এটিকে ক্লিনজ করার চেষ্টা করেছি:

su - openproject -c "cd ~openproject/openproject"

su - openproject -c "git checkout stable"

su - openproject -c "git checkout Gemfile.lock"
su - openproject -c "git pull"

su - openproject -c "bundle install"

su - openproject -c "RAILS_ENV="production" bundle exec rake db:migrate"
su - openproject -c "RAILS_ENV="production" bundle exec rake db:seed"
su - openproject -c "RAILS_ENV="production" bundle exec rake assets:precompile"

তবে এটি সঠিকভাবে চালিত হয় না এবং প্রতিটি পদক্ষেপে পাসওয়ার্ডের জন্য জিজ্ঞাসা করে। অনুবাদ করা স্ক্রিপ্ট কীভাবে উন্নত করা যায় তাই এটি কাজ করে?

আপডেট 1:

এই সম্পর্কে স্ত্রীরোগ গ্রহণের পরে আমি সেই বিন্দু যেখানে কোডটি রূপান্তরিত হয়েছে:

cd ~openproject/openproject

sudo -u openproject git checkout stable

sudo -u openproject git checkout Gemfile.lock
sudo -u openproject git pull

# the output is good thill here
sudo -u openproject bundle install

sudo -u openproject RAILS_ENV="production" bundle exec rake db:migrate
sudo -u openproject RAILS_ENV="production" bundle exec rake db:seed
sudo -u openproject RAILS_ENV="production" bundle exec rake assets:precompile

আউটপুটটি লাইন পর্যন্ত ঠিক আছে যা কোডের মধ্যে উল্লেখ করে। সেখান থেকে আমি 4 টি ত্রুটি পেয়েছি

sudo: বান্ডিল: কমান্ড পাওয়া যায় নি

আপডেট 2:

দিমিত্রি ভ্যাসিল্যানভের কাছ থেকে পরামর্শ দেওয়ার পরে আমি দেখতে পেলাম যে আমি -i প্রবেশ করিয়ে দিলে এটি ব্যবহারকারীর লগইন হিসাবে অনুকরণ করবে। তবে এটি করার চূড়ান্ত উপায় নয়।

আমি যদি echo $PATHওপেনপ্রজেক্ট হিসাবে লগ ইন করার পরে চালিত আউটপুট হয়/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin

যদি আমি আউটপুট echo $PATHপরে চালানোsu openproject -c "bash -l"/home/openproject/.rvm/gems/ruby-2.1.0/bin:/home/openproject/.rvm/gems/ruby-2.1.0@global/bin:/home/openproject/.rvm/rubies/ruby-2.1.0/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin


আপনি চান sudo, না su
দাউদ

আপনিও (অর্থসূচকভাবে) সুডো করতে পারবেন না cd, যেহেতু এটি শেলটি অন্তর্নির্মিত।
ম্যাডহ্যাটার

কিন্তু সুডো কি রুটের বিকল্প হয় না? আমি রুট এবং স্ক্রিপ্টটি ওপেনপ্রজেক্ট ব্যবহারকারী হিসাবে চালাতে চাই, ঠিক এমন প্রভাব সহ যেন আমি ওপেনপ্রজেক্ট ব্যবহারকারী হিসাবে লগইন করব এবং দ্বিতীয় কমান্ড (সিডি / ওপেনপ্রজেক্ট) থেকে শুরু করব

1
না, sudoঅন্য ব্যবহারকারী হিসাবে চালানোর জন্য ব্যবহৃত হয়, rootকোনও কিছু নির্দিষ্ট না করে ডিফল্ট হয়ে থাকলে আপনি পুরোপুরি সম্পাদন করতে পারেন sudo -u openproject bundle install
দাউদ

আমি অনুমান করি যে আপনি bundle: command not foundত্রুটিটি পাচ্ছেন কারণ আপনি সেট করেছেন PATHবা GEM_PATHআপনার .bash_profileবা .bashrc-isudosudo -iu openproject bundle install
এটিগুলিতে

উত্তর:


19

কেন আপনি শেল স্ক্রিপ্ট তৈরি করেন না এবং ক

su - openproject -c "your_shell_script"

ওপেনপ্রজেক্টের আগে - সম্পর্কে সচেতন থাকুন। এটি আপনার ব্যবহারকারীর পরিবেশের ভেরিয়েবলের পরিবর্তে ওপেনপ্রজেক্টের পরিবেশগত ভেরিয়েবলগুলি সেট করবে।


আমাকে sudoশুরুতে যুক্ত করা দরকার অন্যথায় এটি আমার পাসওয়ার্ডের জন্য আমাকে জিজ্ঞাসা করেছিল।
ইয়ানওয়াগান

sudoপাসওয়ার্ডটি প্রথমবার চালানোর পরে আপনাকে জিজ্ঞাসা করবে, সুতরাং আপনার জিনিসগুলি শেল স্ক্রিপ্টে রাখার এবং susudo
এটির

8

আপনি যদি ব্যাশ ব্যবহার করেন তবে আপনি এখানে ডক করতে পারেন

$ su - user -s/bin/bash -c <<EOF
export X=1
echo $X
EOF

এইভাবে আপনি অনেক কমান্ড কার্যকর করতে পারেন এবং রাষ্ট্রটিকে স্ক্রিপ্টের মধ্যে রাখতে পারেন।

সুডোর সাথে একই

sudo -u user bash <<EOF
your
script
here
EOF

কেউই আমার পক্ষে কাজ করে না। আপনি কি সত্যিই স্টিডিন থেকে সু / সুডোতে আদেশগুলি পাস করতে পারবেন?
স্পারহাক

1
@ স্পারহাক, যাচাই করার জন্য ধন্যবাদ। দ্বিতীয় উদাহরণে আমি "বাশ" যুক্ত করতে ভুলে গিয়েছি (ইতিমধ্যে উদাহরণটি আপডেট হয়েছে) - কাজ করে। প্রথম উদাহরণটি পুরোপুরি কাজ করছে না যেমনটি আপনি উল্লেখ করেছেন, আমি দীর্ঘমেয়াদী ক্যাশে থেকে টাইপ করছিলাম যাতে আমি ভুল করতে পারি, তবে অবশ্যই স্টিডিনের সাথে আমার কাজ ছিল (আমি সেই কাজটির জন্য সাবপ্রসেস চালাতে জাভা ব্যবহার করছিলাম) আমি চেষ্টা করব সঠিক উপায় খুঁজতে এটি আরও পরীক্ষা করুন।
স্পিনাস

1
আমার বিভিন্ন ভেরিয়েবলের উপর নির্ভর করে একটি কমান্ড তৈরি করতে এবং এটি অন্য ব্যবহারকারী হিসাবে চালানো দরকার। সুতরাং YoMismo এর পরামর্শটি আমার ক্ষেত্রে কোনও বিকল্প ছিল না। আমি এটি এক ঘন্টা ধরে লড়াই করেছিলাম, কেবলমাত্র আমি কাজ করতে পেলাম তা হ'ল ইওএফ পদ্ধতির (দ্বিতীয় উদাহরণ)। ধন্যবাদ!
জেট 14
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.