如何按名称而非ID来使用Vagrant停止环境

4

从Vagrant文档中:

vagrant halt [name|id]

假设vagrant global-status输出如下:

id       name    provider   state    directory
------------------------------------------------
6e16e1a  envname virtualbox running  D:/git/envname

因此,从包含 Vagrantfile 的目录外部,我应该能够使用以下命令之一停止此虚拟机:

vagrant halt 6e16e1a #works!

除了与...

vagrant halt envname #doesn't work!

错误消息:

需要 Vagrant 环境或目标机器来运行此命令。运行 vagrant init 创建一个新的 Vagrant 环境,或者从 vagrant global-status 获取目标机器的 ID 执行此命令。最后一个选项是切换到带有 Vagrantfile 的目录并重试。

这与在没有 Vagrantfile 的目录中运行 vagrant halt 相同。

那么,我可以通过名称来 vagrant halt 吗?如果可以,该如何操作?

Windows 10 上的 Vagrant 2.2.14

Vagrantfile 摘录:

config.vm.hostname = "envname"
config.vm.define "envname"
1个回答

0

我找不到一个“干净”的解决方案来解决这个问题,所以我写了一个小的bash函数来从盒子名称中获取盒子id

function vgid() {
  BOX_NAME=$1
  BOX_ID=$(vagrant global-status --prune | grep $BOX_NAME | awk '{print $1}')

  echo $BOX_ID
}

使用这个函数,我现在可以在命令中使用盒子的名称,例如:
vagrant up $(vgid name)

这不是我最喜欢的解决方案,但它确实有效,而且我更喜欢它而不是从global-status输出中复制粘贴ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接