Este es el código bash que debe ejecutarse. Entonces, primero sustituye al usuario para abrir el proyecto y luego ejecuta todo el código:
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
He intentado cambiar el script anterior en esto:
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"
pero esto no funciona correctamente y en cada paso solicita la contraseña. ¿Cómo se puede mejorar el script traducido para que funcione?
ACTUALIZACIÓN 1:
Después de recibir sugerencias sobre esto, soy el punto donde el código ha sido modificado en:
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
La salida está bien hasta la línea que lo indica en el código. A partir de ahí me sale 4 error
sudo: paquete: comando no encontrado
ACTUALIZACIÓN 2:
Después de probar la sugerencia de Dmitry Vasilyanov, descubrí que si inserto el -i se simulará como inicio de sesión del usuario. Sin embargo, esta no es la forma final de hacerlo.
Si ejecuto echo $PATH
después de iniciar sesión como proyecto abierto, la salida es/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/home/openproject/.rvm/bin
Si corro echo $PATH
después de que su openproject -c "bash -l"
la salida es/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
, nosu
.cd
, ya que es un shell incorporado.sudo
se usa para ejecutarse como otro usuario, siendoroot
el predeterminado si no se especifica nada, puede ejecutarlo perfectamentesudo -u openproject bundle install
.bundle: command not found
error porque se establecePATH
oGEM_PATH
en su.bash_profile
o.bashrc
, que no se ejecutan en los depósitos sin conectar / no interactivo, por lo que necesita para pasar-i
asudo
al inicio de sesión simular, por ejemplo:sudo -iu openproject bundle install
Respuestas:
¿Por qué no creas un script de shell y haces un
su - openproject -c "your_shell_script"
Tenga en cuenta el - antes del proyecto abierto. Eso establecerá las variables de entorno de openproject en lugar de las variables de entorno de su usuario.
fuente
sudo
al principio, de lo contrario, me pidió mi contraseña.sudo
también le pedirá la contraseña la primera vez que la ejecute, de ahí el consejo de poner sus cosas en un script de shell y ejecutarlas consu
osudo
Si usas bash puedes hacer here-doc
De esa manera, puede ejecutar muchos comandos y mantener el estado dentro de un script.
Lo mismo con sudo
fuente