Bash Vagrant provision shell,使用命令自动安装Linuxbrew

Bash Vagrant provision shell,使用命令自动安装Linuxbrew,bash,shell,vagrant,vagrantfile,vagrant-provision,Bash,Shell,Vagrant,Vagrantfile,Vagrant Provision,我正在使用这个文件: VAGRANTFILE_API_VERSION = "2" Vagrant.configure(VAGRANTFILE_API_VERSION) do |config| config.vm.box = "ubuntu/trusty64" ...bla bla bla bla bla... config.vm.provision "shell", path: "provision/setup.sh" end 因为我想安装Linuxbrew,所以在我

我正在使用这个文件:

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

  config.vm.box = "ubuntu/trusty64"

  ...bla bla bla bla bla...

    config.vm.provision "shell", path: "provision/setup.sh"

end
因为我想安装Linuxbrew,所以在我的provision/setup.sh中有以下代码:

sudo apt-get update

sudo apt-get install --yes git-all libreadline-dev build-essential curl git m4 python-setuptools ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"

# or maybe also this: (but nothing anyway):
# sudo git clone https://github.com/Linuxbrew/linuxbrew.git /home/vagrant/.linuxbrew

export PATH=$HOME/.linuxbrew/bin:$PATH

brew doctor
但我检索错误:

==> default: /tmp/vagrant-shell: line 35: brew: command not found

如何解决这个问题?

让我猜猜。在ruby命令之前添加
yes

yes | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"

让我猜猜。在ruby命令之前添加
yes

yes | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"

如何运行脚本存在一个问题-当您使用
config.vm.provision“shell”运行时,路径:“provision/setup.sh”
vagrant将以
root
用户的身份运行脚本,因此您不需要sudo

但是,您应该真正以您的用户身份运行它,
config.vm.provision“shell”,路径:“provision/setup.sh”,privileged:false

此外,导出不会保存到您未来的会话中,因此将其添加到
.bashrc
文件中,类似于
echo PATH=$HOME/.linuxbrew/bin:$PATH>.bashrc
这样最终的脚本如下所示

sudo apt-get update
sudo apt-get install --yes git-all libreadline-dev build-essential curl git m4 python-setuptools ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev

yes | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"

echo PATH=$HOME/.linuxbrew/bin:$PATH >> ~/.bashrc    
export PATH=$HOME/.linuxbrew/bin:$PATH
brew doctor
如果您从脚本运行brew,则需要导出,但请注意,brew doctor可能会以警告结束,并且不会返回,因此您可能会看到类似的流浪消息

The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.

最后,对于最初的错误,@BMW获得了所有的信任向命令添加
yes |
将默认问题的回车键

在使用
config.vm.provision“shell”运行脚本时,出现了一个问题,路径:“provision/setup.sh”
vagrant将以
root
用户身份运行它,因此您不需要sudo

但是,您应该真正以您的用户身份运行它,
config.vm.provision“shell”,路径:“provision/setup.sh”,privileged:false

此外,导出不会保存到您未来的会话中,因此将其添加到
.bashrc
文件中,类似于
echo PATH=$HOME/.linuxbrew/bin:$PATH>.bashrc
这样最终的脚本如下所示

sudo apt-get update
sudo apt-get install --yes git-all libreadline-dev build-essential curl git m4 python-setuptools ruby texinfo libbz2-dev libcurl4-openssl-dev libexpat-dev libncurses-dev zlib1g-dev

yes | ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/linuxbrew/go/install)"

echo PATH=$HOME/.linuxbrew/bin:$PATH >> ~/.bashrc    
export PATH=$HOME/.linuxbrew/bin:$PATH
brew doctor
如果您从脚本运行brew,则需要导出,但请注意,brew doctor可能会以警告结束,并且不会返回,因此您可能会看到类似的流浪消息

The SSH command responded with a non-zero exit status. Vagrant
assumes that this means the command failed. The output for this command
should be in the log above. Please read the output to determine what
went wrong.

最后,对于最初的错误,@BMW获得了所有的信任向命令添加
yes |
将默认问题的回车键

现在它说:
==>默认:不要以root用户身份运行它!==>默认值:/tmp/vagrant shell:line 35:brew:command not found
@JohnSam-很想知道是否找到了解决方案。现在它说:
==>默认值:不要以root用户身份运行它!==>默认值:/tmp/vagrant shell:line 35:brew:command not found
@JohnSam-很想知道是否找到了解决方案。如果我想以root用户的身份运行所有东西,而只是以“vagrant”普通用户的身份运行linuxbrew?老实说,我从来没有这样做过,但我想
su-l vagrant-c“brew doctor”
会奏效;在这种情况下,还要确保如果您执行echo操作以获得完整路径,否则它无论如何都会转到root,并且在Vagrantfile中使用
特权:“false”
,我得到:
==>默认值:不要以root身份运行此操作并且它不工作!抱歉-删除报价,必须是特权:false,因此它是值false,而不是stringOk,然后才能接受答案。。。现在它可以工作了,但我无法在bash中修复brew。我尝试这样做:
echo PATH$PATH[-f~/.bashrc]| touch~/.bashrc grep'PATH=/home/vagrant/.linuxbrew/bin'~/.bashrc | | echo'export PATH=$home/.linuxbrew/bin:$PATH'.$tee-a~/.bashrc-echo'export PATH=“$home/.linuxbrew/bin:$PATH'>~/.bashrc.~/。bashrc echo PATH$PATH brew doctor
它对我说:
==>默认值:/tmp/vagrant shell:第30行:brew:command not found
如果我想以root用户的身份运行一切,而只是以“vagrant”普通用户的身份运行linuxbrew?老实说,我从来没有这样做过,但我想
su-l vagrant-c“brew doctor”
会起作用;在这种情况下,还要确保如果您执行echo操作以获得完整路径,否则它无论如何都会转到root,并且在Vagrantfile中使用
特权:“false”
,我得到:
==>默认值:不要以root身份运行此操作并且它不工作!抱歉-删除报价,必须是特权:false,因此它是值false,而不是stringOk,然后才能接受答案。。。现在它可以工作了,但我无法在bash中修复brew。我尝试这样做:
echo PATH$PATH[-f~/.bashrc]| touch~/.bashrc grep'PATH=/home/vagrant/.linuxbrew/bin'~/.bashrc | | echo'export PATH=$home/.linuxbrew/bin:$PATH'.$tee-a~/.bashrc-echo'export PATH=“$home/.linuxbrew/bin:$PATH'>~/.bashrc.~/。bashrc echo PATH$PATH brew doctor
它对我说:
==>默认值:/tmp/vagrant shell:line 30:brew:command not found