Ini adalah kode bash yang harus dijalankan. Jadi pertama-tama ia menggantikan pengguna untuk membuka proyek dan menjalankan semua kode:
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
Saya telah mencoba mengubah skrip di atas menjadi ini:
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"
tetapi ini tidak berjalan dengan baik dan pada setiap langkah meminta kata sandi. Bagaimana skrip yang diterjemahkan ditingkatkan sehingga berfungsi?
PEMBARUAN 1:
Setelah menerima saran tentang ini, saya adalah titik di mana kode telah diubah menjadi:
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
Outputnya ok sampai baris yang menyatakan begitu ke dalam kode. Dari sana saya mendapatkan 4 kesalahan
sudo: bundle: perintah tidak ditemukan
PEMBARUAN 2:
Setelah mencoba saran dari Dmitry Vasilyanov saya menemukan bahwa jika saya memasukkan -i itu akan disimulasikan sebagai login pengguna. Namun ini bukan cara terakhir untuk melakukannya.
Jika saya menjalankan echo $PATH
setelah masuk sebagai openproject ouput adalah/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Jika saya menjalankan echo $PATH
setelah su openproject -c "bash -l"
output/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
, tidaksu
.cd
, karena itu adalah shell builtin.sudo
digunakan untuk dijalankan sebagai pengguna lain, sebagairoot
default jika tidak ada yang ditentukan, Anda dapat menjalankannya dengan sempurnasudo -u openproject bundle install
.bundle: command not found
kesalahan karena Anda menetapkanPATH
atauGEM_PATH
di Anda.bash_profile
atau.bashrc
, mereka tidak dieksekusi di non-login / non-interaktif kerang, sehingga Anda harus lulus-i
untuksudo
ke masuk simulasi, seperti ini:sudo -iu openproject bundle install
Jawaban:
Mengapa Anda tidak membuat skrip shell dan melakukan
su - openproject -c "your_shell_script"
Waspadai - sebelum proyek terbuka. Itu akan mengatur variabel lingkungan proyek terbuka, bukan variabel lingkungan pengguna Anda.
sumber
sudo
di awal jika tidak meminta kata sandi saya.sudo
juga akan meminta kata sandi saat pertama kali Anda menjalankannya, maka disarankan untuk meletakkan barang-barang Anda di skrip shell dan menjalankannya dengansu
atausudo
Jika Anda menggunakan bash, Anda dapat melakukannya di sini-doc
Dengan begitu Anda bisa menjalankan banyak perintah dan menjaga status di dalam skrip.
Sama dengan sudo
sumber