To jest kod bash, który powinien zostać uruchomiony. Więc najpierw zastępuje użytkownika openproject, a następnie uruchamia cały kod:
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
Próbowałem zmienić powyższy skrypt w ten sposób:
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"
ale to nie działa poprawnie i na każdym kroku prosi o hasło. Jak poprawić przetłumaczony skrypt, aby działał?
AKTUALIZACJA 1:
Po otrzymaniu sugestii na ten temat jestem punktem, w którym kod został zmodyfikowany w:
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
Dane wyjściowe są w porządku, dopóki wiersz nie podaje tego w kodzie. Stamtąd otrzymuję błąd 4
sudo: bundle: nie znaleziono polecenia
AKTUALIZACJA 2:
Po wypróbowaniu sugestii Dmitrija Wasiljanowa odkryłem, że jeśli wstawię -i, będzie to symulowane jako logowanie użytkownika. Jednak nie jest to ostatni sposób na zrobienie tego.
Jeśli uruchomię się echo $PATH
po zalogowaniu jako openproject, wyjście będzie/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Jeśli uruchomię echo $PATH
po su openproject -c "bash -l"
wyjściu jest/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
niesu
.cd
, ponieważ jest to wbudowana powłoka.sudo
służy do uruchamiania jako inny użytkownik, ponieważroot
domyślnie, jeśli nic nie zostanie określone, można doskonale wykonaćsudo -u openproject bundle install
.bundle: command not found
błąd, ponieważ można ustawićPATH
alboGEM_PATH
w twojej.bash_profile
lub.bashrc
nie są one wykonywane bez logowania / non-interactive muszle, więc trzeba przejść-i
dosudo
do symulacji logowania, na przykład:sudo -iu openproject bundle install
Odpowiedzi:
Dlaczego nie utworzysz skryptu powłoki i nie wykonasz
su - openproject -c "your_shell_script"
Bądź świadomy - przed otwartym projektem. To ustawi zmienne środowiskowe openproject zamiast zmiennych środowiskowych użytkownika.
źródło
sudo
na początku, inaczej poprosiłoby mnie o hasło.sudo
będzie również prosić o hasło przy pierwszym uruchomieniu, stąd doradzić o oddanie rzeczy w skrypcie powłoki i działa, że z jednejsu
lubsudo
Jeśli używasz bash, możesz zrobić tutaj-doc
W ten sposób możesz wykonywać wiele poleceń i utrzymywać stan w skrypcie.
To samo dotyczy sudo
źródło