Shell 以用户身份在无限制设置后执行命令

Shell 以用户身份在无限制设置后执行命令,shell,vagrant,Shell,Vagrant,在初始设置之后,有些命令必须作为普通用户运行。我想我可以使用一个单独的shell脚本和命令su--login-cvagrant来实现这一点,但它不能从.bashrc获取用户路径或其他环境设置 e、 g: 有办法做到这一点吗?也许必须使用另一种资源调配工具,如Puppet或Chef来完成?我曾考虑过创建另一个shell脚本来生成.bashrc,使用:file provisioner将其复制到box中,并执行类似的命令,但这看起来有点像是一种黑客行为 正确的方法是什么?您应该能够使用,例如 Vagr

在初始设置之后,有些命令必须作为普通用户运行。我想我可以使用一个单独的shell脚本和命令su--login-cvagrant来实现这一点,但它不能从.bashrc获取用户路径或其他环境设置

e、 g:

有办法做到这一点吗?也许必须使用另一种资源调配工具,如Puppet或Chef来完成?我曾考虑过创建另一个shell脚本来生成
.bashrc
,使用:file provisioner将其复制到box中,并执行类似的命令,但这看起来有点像是一种黑客行为


正确的方法是什么?

您应该能够使用,例如

Vagrant.configure(“2”)do | config|

$script=我想记录一个解决方案,用于shell provisioner必须以非root用户身份在登录shell中运行命令的情况:

将设置命令放入shell脚本(例如“bootstrap.sh”):

然后在你的文件中:

Vagrant.configure(2) do |config|

  $script = "/bin/bash --login /vagrant/bootstrap.sh"
  config.vm.provision :shell, privileged: false, inline: $script

end
您应该将
/vagrant/bootstrap.sh
路径替换为vagrant机器内设置脚本的正确路径

我专门使用此解决方案来让
rvm
命令在使用Vagrant进行资源调配时工作。

我尝试了这两种方法,但结果都不起作用

安装
rbenv
并在Vagrant配置过程中使用它

在使用
rbenv
命令之前使用下一个命令

export PATH=“$HOME/.rbenv/bin:$PATH”
export PATH=“$HOME/.rbenv/plugins/ruby build/bin:$PATH”
求值“$(rbenv init-”
Bootstrap.sh文件

#/usr/bin/env bash
更新源
echo“==========================================================================================================================================================”
sudo apt get install-y autoconf bison build essential libssl dev libyaml dev libreadline6 dev zlib1g dev libncurse5 dev libffi dev libgdbm3 libgdbm dev
echo“================================================================================================================================================================================================================”
git克隆https://github.com/rbenv/rbenv.git ~/.rbenv
echo“export PATH=“$HOME/.rbenv/bin:$PATH”>>~/.bashrc
echo'eval“$(rbenv init-”>>~/.bashrc
echo“==========================================================================================================================================
git克隆https://github.com/rbenv/ruby-build.git  ~/.rbenv/plugins/ruby build
echo'export PATH=“$HOME/.rbenv/plugins/ruby build/bin:$PATH”>>~/.bashrc
echo“===============================================================================================================================================================================”
export PATH=“$HOME/.rbenv/bin:$PATH”
export PATH=“$HOME/.rbenv/plugins/ruby build/bin:$PATH”
求值“$(rbenv init-”
rbenv安装2.5.0
rbenv全球2.5.0
ruby-v
gem-v
echo“==============================================================================================================================================”
gem安装绑定器
rbenv再灰烬
然后
vagrant文件
文件将包括vagrant供应行

deploy\u config.vm.provision:shell,privileged:false,路径:“bootstrap.sh”
我的答案来源于


在vagrant provisioning process at

中使用
rbenv
命令的另一种方法有时您希望混合使用特权命令和非特权命令。如果您的情况需要使用runuser


runuser-l vagrant-c'command'
su-p
将保留环境变量-这有帮助吗?@Vince我想,如果您提到使用Ruby安装的build
vagrant
box,添加
Ruby
标记并在问题的标题上附加Ruby安装,如下=>在Vagrant Provisioning期间以用户身份执行Ruby安装命令有没有办法以非默认用户身份执行此操作?我正在尝试将
nvm
作为Vagrant文件的一部分进行安装。默认脚本将为root用户安装它,而不是
vagrant
用户。这样做不需要编写shell脚本。
Vagrant.configure("2") do |config|
  $script = <<-SCRIPT
  rbenv install 2.0.0-p353
  rbenv global 2.0.0-p353
  gem update --system
  yes | gem update
  gem install rdoc
  gem install rails pg
  SCRIPT

  config.vm.provision "shell", inline: $script, privileged: false
end
#! /bin/bash

rbenv install 2.0.0-p353
rbenv global 2.0.0-p353
gem update --system
yes | gem update
gem install rdoc
gem install rails pg
Vagrant.configure(2) do |config|

  $script = "/bin/bash --login /vagrant/bootstrap.sh"
  config.vm.provision :shell, privileged: false, inline: $script

end