cod*_*iac 22 bash debian su sudo
这是应该运行的 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
Run Code Online (Sandbox Code Playgroud)
我已经尝试将上述脚本更改为:
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"
Run Code Online (Sandbox Code Playgroud)
但这不能正常运行,并且每一步都要求输入密码。如何改进翻译后的脚本以使其正常工作?
更新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
Run Code Online (Sandbox Code Playgroud)
输出是好的,直到在代码中说明的行。从那里我得到 4 个错误
须藤:捆绑:找不到命令
更新 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
YoM*_*smo 19
你为什么不创建一个shell脚本并做一个
su - openproject -c "your_shell_script"
请注意 - 在 openproject 之前。这将设置 openproject 的环境变量而不是您的用户环境变量。
如果你使用 bash 你可以做 here-doc
$ su - user -s/bin/bash -c <<EOF
export X=1
echo $X
EOF
Run Code Online (Sandbox Code Playgroud)
这样您就可以执行许多命令并将状态保存在脚本中。
与 sudo 相同
sudo -u user bash <<EOF
your
script
here
EOF
Run Code Online (Sandbox Code Playgroud)