Как запустить vagrant в debian wsl в терминале Windows

Поскольку вы не можете привести пример каждого имени файла, которое когда-либо могло существовать, и каждого шаблона, который вы когда-либо могли искать, я продолжу то, что у вас есть:

find. -type f | awk -F / '{print $2}' | grep -v '\.[1-100]$'

Учитывая, что вы указали ver1.txt, ver1и file.1в качестве файлов в каталоге, в котором вы ищете, приведенная выше команда вернет желаемый результат:

ver1.txt
ver1

Объяснить каждую часть:

find. -type fВозвращает все файлы в текущем каталоге

awk -F / '{print $2}'Удаляет ./в начале каждого файла, появляющегося из команды find

grep -v '\.[1-100]$'Возвращает все файлы, не заканчивающиеся на .#, где #— любое число из 1-100. Переключатель vнаходит все строки, не соответствующие .#. В приведенном вами примере необходимо использовать \, чтобы экранировать ., и использовать одинарные кавычки вокруг строки. $указывает файлы, оканчивающиеся на эту строку, хотя в вашем случае он будет работать и без нее. Я включил его только на тот случай, если могут быть файлы с .где-то еще в имени файла.

Вам придется изменить параметры в зависимости от того, что вы ищете, но это должно помочь вам начать работу.

3
03.01.2021, 17:43
2 ответа

Полное раскрытие информации -Я не использую Vagrant, но, сталкиваясь с подобными проблемами PATH в WSL в прошлом, я все еще надеюсь, что это будет решением вашей проблемы.

Во-первых, я предполагаю, что вы используете инструкции WSL для Vagrant. Если да, то у вас установлены две версии Vagrant. Первая — это версия для Windows (, поскольку вы упомянули о ее запуске под PowerShell и cmd ), и, как говорится в документации, «Хотя исполняемый файл vagrant.exe, предоставляемый установкой Vagrant Windows, доступен из WSL, он не будет работать должным образом».

Таким образом, если вы следовали этим инструкциям, вы также установили версию Debian в свой экземпляр WSL через файл.deb.

Но действительно ли WSL использует версию Debian? Скорее всего нет. Поскольку у вас также установлена ​​версия для Windows, и WSL «услужливо» добавляет ваш путь Windows к вашему пути WSL, запуск vagrant upиз WSL/Debian, скорее всего, по-прежнему найдет первый vagrantна вашем пути, который, вероятно, является Windows версия. На самом деле это очень распространенная проблема с WSL и с установленными версиями инструмента для Windows и Linux.

Вы можете проверить это, запустив which vagrantиз Debian и увидев, какой исполняемый файл найден. Если это версия Windows, то, надеюсь, виновата она.

Есть несколько возможных обходных путей, о которых я знаю:

  1. Создайте сценарий запуска (, например. bashrc или эквивалент для выбранной вами оболочки ), который удаляет узел Windows из пути или, по крайней мере, дает версии Linux более высокий приоритет.

  2. Создайте /etc/wsl.conf с...

    [interop]
    appendWindowsPath = false
    

    Это приведет к удалению всех путей Windows из сеанса WSL. Недостатком является то, что некоторые полезные утилиты Windows больше не будут находиться в пути WSL, но вы всегда можете добавить их обратно вручную в сценарии запуска. Это, вероятно, проще с точки зрения сценариев, чем удаление путей вручную, по крайней мере.

  3. Если вам это больше не нужно и вы будете использовать исключительно версию для Linux/WSL, вы можете удалить Windows Vagrant.

1
18.03.2021, 22:39

Убедитесь, что вы используете последнюю версию Vagrant или не ниже 2.2.15, в противном случае исполняемые файлы Windows могут неправильно запускаться из Linux.

Просто добавьте путь к cmd.exeв Linux:

export PATH="$PATH:/mnt/c/Windows/System32"

В противном случае вы получите следующую ошибку, как вы описали:

The executable 'cmd.exe' Vagrant is trying to run was not
found in the PATH variable. This is an error. Please verify
this software is installed and on the path.

Вы можете добавить приведенную выше строку в свой файл ~/.profileи перезагрузить его, используя следующие команды:

nano ~/.profile
source ~/.profile

Таким образом, Vagrant сможет найти cmd.exe.

Через переменную среды VAGRANT_WSL_ENABLE_WINDOWS_ACCESSVagrant понимает, что может получить доступ к системе Windows для запуска исполняемых файлов и использования таких функций, как синхронизированные папки. Вы можете найти дополнительную информацию об этой переменной на соответствующей странице официального сайта Vagrant .

export VAGRANT_WSL_ENABLE_WINDOWS_ACCESS="1"

С помощью этой переменной Vagrant будет запускать исполняемые файлы Windows из Linux, включая интерпретатор строк команд Windows cmd.exe-.

Существует видео на YouTube о том, как установить Vagrant под Ubuntu 18 в WSL1 Windows 10 и VirtualBox . Однако, поскольку это видео демонстрирует использование старого программного обеспечения, более новое программное обеспечение может работать не так, как описано в видео. Кроме того, в видео явно не рассматривается проблема с cmd.exe, которую вы описали.

В любом случае запуск Vagrant из Linux для создания виртуальной машины в Windows VirtualBox не всегда проходит гладко. Вы можете столкнуться с ошибками, подобными следующим:

There was an error while executing `VBoxManage`, a CLI used by Vagrant
for controlling VirtualBox. The command and stderr is shown below.

Command: ["startvm", "a1d5c124-261b-4e4b-a11a-88f7bfdda6df", "--type", "headless"]

Stderr: VBoxManage.exe: error: Failed to get device handle and/or partition ID for 
0000000001cf34e0 (hPartitionDevice=0000000000000a39, Last=0xc0000002/1) 
(VERR_NEM_VM_CREATE_FAILED)
VBoxManage.exe: error: Details: code E_FAIL (0x80004005), component ConsoleWrap, interface IConsole

Чтобы избежать этих ошибок и обеспечить надежную работу Vagrant, вам нужно запускать Linux на физическом оборудовании, а не из контейнера Windows WSL или Docker. Если вы запускаете Linux на физическом оборудовании, VirtualBox также будет работать в Linux, и Vagrant не нужно будет взаимодействовать между Linux и Windows, запуская исполняемые файлы Windows в Linux.

1
18.03.2021, 22:39

Теги

Похожие вопросы