これは、実行する必要がある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 $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
シェルスクリプトを作成して、
su - openproject -c "your_Shell_script"
Openprojectの前に注意してください。これにより、ユーザー環境変数ではなく、openprojectの環境変数が設定されます。
Bashを使用している場合は、ヒアドキュメントを使用できます
$ su - user -s/bin/bash -c <<EOF
export X=1
echo $X
EOF
このようにして、多くのコマンドを実行し、スクリプト内の状態を維持できます。
須藤も同じ
Sudo -u user bash <<EOF
your
script
here
EOF