如何将Vagrant虚拟机名称设置为当前工作目录?
解决Vagrant虚拟机名称设为当前工作目录的问题
嘿,我懂你想把Vagrant虚拟机名称设为当前工作目录的需求!你之前的代码无效是因为用了Shell环境变量的写法,但Vagrantfile本质是Ruby脚本,得用Ruby的方式来获取当前目录才行。
问题根源
你写的ENV[$PWD]是错误的:$PWD是Shell里的环境变量,但在Ruby中,ENV哈希需要传入字符串形式的变量名,而且即便写成ENV['PWD'],拿到的是完整路径,更关键的是——Ruby本身有更直接可靠的方法获取当前工作目录,完全不用依赖Shell环境变量。
正确解决方案
方案1:用当前工作目录的完整路径作为虚拟机名称
如果希望直接用完整路径当名称,可以这么写:
config.vm.provider "virtualbox" do |vb| vb.name = Dir.pwd end
方案2:用当前工作目录的名称(更常用)
大多数情况下,我们只需要目录的最后一段名称(比如当前目录是/Users/me/my-dev-vm,只想要my-dev-vm),这时候可以用File.basename来截取:
config.vm.provider "virtualbox" do |vb| vb.name = File.basename(Dir.pwd) end
代码解释
Dir.pwd:Ruby内置方法,返回当前进程的工作目录完整路径,比依赖ENV['PWD']更可靠,不受Shell环境的影响。File.basename(Dir.pwd):File.basename方法会从完整路径中提取最后一部分,也就是目录的名称,完美贴合大多数场景的需求。
把这段代码替换你原来的部分,重新运行vagrant up,虚拟机的名称就会变成你想要的当前工作目录啦!
内容的提问来源于stack exchange,提问作者smithers
相关产品推荐
相关产品推荐

