web-dev-qa-db-ja.com

別のユーザーとして実行するにはどうすればよいですか?

これは、実行する必要があるbashコードです。したがって、最初にユーザーをopenprojectに置き換えてから、すべてのコードを実行します。

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:bundle:コマンドが見つかりません

更新2:

Dmitry Vasilyanovからの提案を試した後、-iを挿入すると、ユーザーログインとしてシミュレートされることがわかりました。ただし、これは最終的な方法ではありません。

echo $PATH openprojectとしてログインした後の出力は/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin

echo $PATHsu 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

20
codiac

シェルスクリプトを作成して、

su - openproject -c "your_Shell_script"

Openprojectの前に注意してください。これにより、ユーザー環境変数ではなく、openprojectの環境変数が設定されます。

19
YoMismo

Bashを使用している場合は、ヒアドキュメントを使用できます

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

このようにして、多くのコマンドを実行し、スクリプト内の状態を維持できます。

須藤も同じ

Sudo -u user bash <<EOF
your
script
here
EOF
8
spinus