Номер вашей сборки Windows: Microsoft Windows [Version 10.0.18362.86]
Что вы делаете и что происходит:
Установка начального каталога для wsl в profiles.json
не указывает на правильный каталог.
{
"startingDirectory": "C:/Users/joshj/AppData/Local/Packages/CanonicalGroupLimited.Ubuntu16.04onWindows_79rhkp1fndgsc/LocalState/rootfs/home/tackyunicorn",
"guid": "{a2785f8e-72c9-4550-b406-697388644902}",
"name": "Ubuntu",
"colorscheme": "MonokaiVivid",
"historySize": 9001,
"snapOnInput": true,
"cursorColor": "#FFFFFF",
"cursorHeight": 25,
"cursorShape": "vintage",
"commandline": "wsl.exe",
"fontFace": "Inconsolata for Powerline",
"fontSize": 10,
"acrylicOpacity": 1,
"useAcrylic": true,
"closeOnExit": true,
"padding": "10, 10, 10, 10",
"icon": "ms-appdata:///roaming/ubuntu.png"
}
Это приводит к запуску wsl в корневой папке.
{
"startingDirectory": "/home/tackyunicorn",
"guid": "{a2785f8e-72c9-4550-b406-697388644902}",
"name": "Ubuntu",
"colorscheme": "MonokaiVivid",
"historySize": 9001,
"snapOnInput": true,
"cursorColor": "#FFFFFF",
"cursorHeight": 25,
"cursorShape": "vintage",
"commandline": "wsl.exe",
"fontFace": "Inconsolata for Powerline",
"fontSize": 10,
"acrylicOpacity": 1,
"useAcrylic": true,
"closeOnExit": true,
"padding": "10, 10, 10, 10",
"icon": "ms-appdata:///roaming/ubuntu.png"
}
Это приводит к запуску wsl в папке пользователя Windows.
startingDirectory
неправильно применяется к профилю wslпохоже, что он ожидает пути к Windows, но передача путей WSL fs напрямую в AppData не работает. У меня работает новый UNC-путь:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src"
-> ~/src
То же самое и с обычными локациями Windows:
"startingDirectory":"C:/wd"
-> /mnt/c/wd
Хм. Возможно, нам стоит добавить настройку, предполагающую, что startDirectory - это путь wsl. Прямо сейчас мы просто вручную устанавливаем рабочий каталог клиентского приложения, которое мы запускаем, поэтому нам нужно специально знать, что профиль пытается быть wsl, и настроить нашу логику для передачи в рабочий каталог.
один простой хак будет внутри ~/.bashrc
файла wsl, добавьте строку
cd ~
Задача решена.
один простой хак будет внутри
~/.bashrc
файла wsl, добавьте строку
cd ~
Задача решена.
Это также отличный способ добиться странного и неожиданного поведения всего остального, что использует bash на вашем компьютере. :улыбка:
Этот метод требует небольшой работы. Мы могли бы разобрать имя дистрибутива из команды в профиле так, чтобы wsl.exe -d Ubuntu
давало нам «Ubuntu», а затем передать это в Profile::EvaluateStartingDirectory
. Затем, если это не удается, перед установкой его на %userprofile%
мы можем оценить \\WSL$\[distributionName][directory]
и посмотреть, является ли это допустимым путем к каталогу.
Или мы могли бы сделать метод нестатическим и извлечь значение из _commandline
.
EDIT: теперь я понимаю, что это не сработает. Сервер P9, скорее всего, не был запущен, и, если бы это было так, не все дистрибутивы были загружены как доступные общие ресурсы по пути UNC.
@ sandeepkv93 - Этот хакер не самый лучший. При работе, скажем, в VS Code, и вы хотите, чтобы ваш WSL-терминал открывался в каталоге вашего проекта, это предотвратит это. Определенно вызовет и другие проблемы
Мое обходное решение
"commandline" : "wsl.exe ~ -d WLinux"
Я только что отредактировал свой /etc/passwd
после создания нового пользователя в качестве домашнего каталога пользователя Windows /c/Users/MikeLloyd
и установил startingDirectory
равным ~
в моем profile.json. У меня работает как положено на 18965.1005.
Мое обходное решение
"commandline" : "wsl.exe ~"
Что, если я хочу установить в качестве каталога по умолчанию каталог в C :?
Я пробовал "commandline" : "wsl.exe /mnt/c/Programming -d Ubuntu-18.04"
и другие каталоги, с /mnt/c/
или без них, с одиночными кавычками или без них, и безуспешно.
@LeoLozes Второй пост в этой теме показывает, как делать именно то, что вы хотите.
в моем случае это работает так
"startingDirectory": "//wsl$/Ubuntu-18.04/home/username"
У меня работали обходные пути wsl.exe ~ -d <distro>
и //wsl$/home/<username>
, но было бы неплохо, если бы startingDirectory
интерпретировались WSL, а не Windows. Например, "startingDirectory": "$HOME/projects"
должно работать.
Было бы неплохо, если бы Windows Terminal мог преобразовать путь. Я выполнил # 1060, ожидая быстрого запуска wsl, но это не работает, потому что проводник Windows всегда передает исходный путь к Терминалу.
Я исправляю эту проблему с помощью
"startingDirectory": "//wsl$/Ubuntu-18.04/home/myname"
в Microsoft Windows [Version 10.0.18363.592]
, вер 0.8.100910.0
Мой способ всегда запускать WSL на $ HOME:
Создайте ссылку на wt.exe,
C: \ Users \ ВАШЕ ИМЯ \ AppData \ Local \ Microsoft \ WindowsApps \ wt.exe wsl.exe ~ -d Ubuntu
и просто закрепите его в моем меню "Пуск" и оставьте "startDirectory" в профиле как null
Если вы не передадите «начальный каталог» в «wsl.exe», он всегда будет запускаться из вашего текущего каталога.
Мое решение - создать новый профиль со стартовой командной строкой wsl.exe ~
. Последняя версия в магазине MS.
{
"acrylicOpacity" : 1,
"closeOnExit" : true,
"colorScheme" : "Campbell",
"commandline" : "wsl.exe ~",
"cursorColor" : "#FFFFFF",
"cursorShape" : "bar",
"fontFace" : "Consolas",
"fontSize" : 12,
"guid" : "{*********************************}",
"historySize" : 9001,
"icon" : "ms-appx:///ProfileIcons/{0caa0dad-35be-5f56-a8ff-afceeeaa6101}.png",
"name" : "Ubuntu home",
"padding" : "0, 0, 0, 0",
"snapOnInput" : true,
"startingDirectory" : "%USERPROFILE%",
"useAcrylic" : true
},
Легко исправить
"startDirectory": "// wsl $ / Ubuntu / home /
@ troy-mac, который буквально запускается в "домашнем" каталоге, а не в вашем домашнем каталоге. См. Ответы выше для бесчисленных рабочих решений ( пример )
Я использую Ubuntu, и мое решение:
"commandline" : "ubuntu.exe"
Легко исправить
"startDirectory": "// wsl $ / Ubuntu / home /",
Я даже не знаю, почему они дают 👎🏻
Спасибо, я понял ... следующее, что нужно решить, это перезапись файла /etc/resolv.conf. Пробовал несколько обойтись без работы
Как запустить WSL в определенном каталоге?
Например, если я хочу начать с ~/dev
что мне писать в свойстве commandline
?
Я попробовал "commandline": "wsl.exe ~/dev"
, но получил ошибку, как показано ниже:
/bin/bash: /home/myname/dev: Is a directory
[process exited with code 126]
Редактировать:
nvm. Выясните это, написав
"startingDirectory":"//wsl$/Ubuntu/home/myname/dev"
С последней версией, выпущенной пару дней назад (profile.json переименован в settings.json), startingDirectory
теперь вообще не работает. Ни один вариант в этой ветке не работает для меня, кто-нибудь еще видит то же самое?
Установка startingDirectory
у меня сработала, но кажется, что вам нужно поместить ее в используемый вами профиль. Так, например, Ubuntu:
{
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
"hidden": false,
"name": "Ubuntu",
"source": "Windows.Terminal.Wsl",
"startingDirectory":"//wsl$/Ubuntu/home/me/dev"
},
У меня установлено 4 дистрибутива wsl: Ubuntu, Debian, Kali-Linux и CentOS. Когда я использую настройку "startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob"
По большей части Debian уважает начальный каталог, но не всегда, другие этого не делают. Однако, когда я открываю вторую вкладку с одной, другие 3 диска, которые они всегда открывают в ~ Кажется, что использование "startingDirectory": "//wsl$//<distroname>/home/jakob"
имеет никакого значения, но использование \\
более надежно
Изменить: я использую сборку предварительной версии Insider 19619 и wsl2. Кажется, что когда виртуальные машины запущены и работают, они соблюдают настройку startDirectory. Если виртуальные машины остановлены и должны запускаться при открытии вкладки, они этого не делают.
Легко исправить
"startDirectory": "// wsl $ / Ubuntu / home /",Я даже не знаю, почему они дают 👎🏻
Это должно быть / home / username, а не / home
Чтобы повторить то, что уже было сказано , вот как вы устанавливаете начальный каталог для данного экземпляра WSL:
"profiles": [
{
"guid": "{2c4de342-38b7-51cf-b940-2309a097f518}",
"hidden": false,
"name": "Ubuntu",
"source": "Windows.Terminal.Wsl",
"fontFace": "Cascadia Code",
"fontSize": 12,
// THIS vvvvvvvvvvvv
"commandline": "wsl.exe ~ -d Ubuntu"
}
],
Замените «Ubuntu» названием своего дистрибутива.
У меня установлено 4 дистрибутива wsl: Ubuntu, Debian, Kali-Linux и CentOS. Когда я использую настройку
"startingDirectory": "\\\\wsl$\\<distroname>\\home\\jakob"
По большей части Debian уважает начальный каталог, но не всегда, другие этого не делают. Однако, когда я открываю вторую вкладку с одной, другие 3 диска, которые они всегда открывают в ~ Кажется, что использование"startingDirectory": "//wsl$//<distroname>/home/jakob"
имеет никакого значения, но использование\\
более надежноИзменить: я использую сборку предварительной версии Insider 19619 и wsl2. Кажется, что когда виртуальные машины запущены и работают, они соблюдают настройку startDirectory. Если виртуальные машины остановлены и должны запускаться при открытии вкладки, они этого не делают.
Это потому, что // папка wsl $ / не инициализируется, пока не будет запущен экземпляр wsl. Таким образом, первый экземпляр не будет запускаться в ~, но остальные начнутся в ~, потому что первый экземпляр инициализировал папку // wsl $ /
@ troy-mac, который буквально запускается в "домашнем" каталоге, а не в вашем домашнем каталоге. См. Ответы выше для бесчисленных рабочих решений ( пример )
@antoineco Я использую Ubuntu (не уверен, что это имеет значение), но он помещает меня в _my_ домашний каталог / home / troymac, поэтому для меня я получаю результаты, которые искал ...
@ troy-mac Я только что попробовал Ubuntu, но это не так. У вас, вероятно, есть другая директива, либо в вашем файле настроек, либо в вашем файле bashrc, но только она _не_ помещает вас в ваш домашний каталог.
В любом случае, моя главная мысль заключалась в том, что мы не должны содержать в этой ветке ошибочной информации. Было предложено рабочее решение , давайте посоветуем пользователям использовать его вместо того, чтобы делиться неточными альтернативными приемами.
Для меня (возможно, из-за zsh) обходной путь "commandline": "wsl.exe /mnt/d/workspace -d Debian"
не работает:
zsh:1: permission denied: /mnt/d/workspace
[process exited with code 126]
но "startingDirectory": "D:/workspace"
без "commandline"
работает нормально, как было предложено в самом начале.
Нет мира, в котором указание каталога с помощью wsl /directory
будет работать. Это _всегда_ (не только при использовании zsh!) Приведет к тому, что оболочка попытается _выполнить каталог_, а затем завершится. Это никогда не то, чего вы хотите.
какие-нибудь обновления по этому поводу?
@maximgeerinck Нет. Мы обязательно обновим эту ветку, когда она появится. А пока могу я порекомендовать кнопку «Подписаться»?
Таким образом, вы будете уведомлены обо всех обновлениях этой ветки, без необходимости пинговать всех в этой ветке
Привет всем, что я знаю, я получил несколько отрицательных отзывов за это предложение, которое я опубликовал ранее, но я только что установил WSL и Ubuntu-20.04 в новой системе, и все, что я сделал, это добавил следующие строки в свой файл settings.json, и это 100% работал для того, чтобы перетащить меня в мой домашний каталог. Я не говорю, что это сработает для всех, так как я не уверен, что пользователи, поставившие отметку «Нравится», действительно тестировали это или нет, но он работал у меня в двух разных системах как с Ubuntu-20.04, так и с 18.04. Я думаю, что это проще всего попробовать в первую очередь, и если это не сработает для вас, попробуйте еще пару предложений в этой теме.
"startDirectory": "//wsl$/Ubuntu-20.04/home/troy-mac"
"startDirectory": "//wsl$/Ubuntu-18.04/home/troy-mac"
или используйте предложение @antoineco, которое может работать все время ...
"командная строка": "wsl.exe ~ -d Ubuntu"
@ troy-mac Я говорю здесь от себя, но большой палец вниз был способом сказать _ «Внимание, читатель. Решение, предложенное в этом сообщении, не работает для всех, пожалуйста, обратитесь к принятому решению» _. Это не была попытка вас уволить.
Как вы сказали, "commandline": "wsl.exe ~ -d <distro_name>"
(https://github.com/microsoft/terminal/issues/592#issuecomment-504947429) работает практически в любом случае, поэтому давайте сделаем так, чтобы это решение было видно людям, которые через эту проблему, вместо того, чтобы пытаться найти новые приблизительные решения.
При установке Ubuntu можно использовать
"startingDirectory":"\\\\wsl$\\[DISTRONAME]\\home\\[USERNAME]"
Если вы не уверены, что такое [DISTRONAME], выполните:
Теперь вы получите общий доступ к файлам в проводнике. Fx
Просто следуйте пути туда, откуда вы хотите начать, открывая новую вкладку в Терминале Windows. Помните:
Подобно:
при построении startingDirectory
. Перезагрузите Терминал Windows, и все готово.
Самый полезный комментарий
похоже, что он ожидает пути к Windows, но передача путей WSL fs напрямую в AppData не работает. У меня работает новый UNC-путь:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src"
->~/src
То же самое и с обычными локациями Windows:
"startingDirectory":"C:/wd"
->/mnt/c/wd