Dies ist der Bash-Code, der ausgeführt werden sollte. Zuerst ersetzt es den Benutzer durch openproject und führt dann den gesamten Code aus
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
Ich habe versucht, das obige Skript wie folgt zu schreiben:
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"
Dies funktioniert jedoch nicht ordnungsgemäß und fordert Sie bei jedem Schritt zur Eingabe eines Kennworts auf. Wie kann das übersetzte Skript verbessert werden, damit es funktioniert?
UPDATE 1:
Nachdem ich Vorschläge dazu erhalten habe, bin ich der Punkt, an dem der Code geändert wurde in:
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
Die Ausgabe ist in Ordnung bis zu der Zeile, die dies im Code angibt. Von dort bekomme ich 4 fehler
sudo: bundle: befehl nicht gefunden
UPDATE 2:
Nachdem ich den Vorschlag von Dmitry Vasilyanov ausprobiert hatte, stellte ich fest, dass, wenn ich das -i einfüge, dies als Benutzeranmeldung simuliert wird. Dies ist jedoch nicht der letzte Weg, dies zu tun.
Wenn ich echo $PATH
nach dem Einloggen als openproject laufe ist die Ausgabe/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Wenn ich laufe echo $PATH
nach su openproject -c "bash -l"
dem Ausgang/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
nichtsu
.cd
, da es eine eingebaute Shell ist.sudo
wird verwendet, um als anderer Benutzerroot
ausgeführt zu werdensudo -u openproject bundle install
. Wenn nichts angegeben ist, können Sie dies standardmäßig perfekt ausführen .bundle: command not found
Fehler , weil Sie setzenPATH
oderGEM_PATH
in Ihrem.bash_profile
oder.bashrc
werden sie in nicht-Login / nicht-interaktive Shell nicht ausgeführt, so dass Sie übergeben müssen ,-i
umsudo
zu simulieren , Login, wie folgt aus :sudo -iu openproject bundle install
Antworten:
Warum erstellen Sie nicht ein Shell-Skript und machen ein
su - openproject -c "your_shell_script"
Beachten Sie das - vor openproject. Dadurch werden die Umgebungsvariablen von openproject anstelle Ihrer Benutzerumgebungsvariablen festgelegt.
quelle
sudo
Beginn hinzufügen, da ich sonst nach meinem Passwort gefragt wurde.sudo
su
sudo
Wenn Sie Bash verwenden, können Sie dies hier-doc tun
Auf diese Weise können Sie viele Befehle ausführen und den Status in einem Skript beibehalten.
Das selbe mit sudo
quelle