首页 > 解决方案 > 如何通过名称而不是 id 来停止环境

问题描述

从 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 环境。或者,获取目标机器的 ID 以在vagrant global-status其上运行此命令。最后一个选择是切换到带有 Vagrantfile 的目录并重试。

vagrant halt这与我在没有 Vagrantfile 的目录中时的输出相同。

那么,我可以按名称流浪停止吗,如果可以,如何?

Windows 10 上的 Vagrant 2.2.14

流浪文件摘录:

config.vm.hostname = "envname"
config.vm.define "envname"

标签: vagrantvagrant-windows

解决方案


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

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。


推荐阅读