您的Windows内部版本号: Microsoft Windows [Version 10.0.18362.86]
您正在做什么以及正在发生什么:
在profiles.json
中为wsl设置起始目录不会使其指向正确的目录。
{
"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路径,但直接在AppData下传递WSL fs路径无效。 使用新的UNC路径对我有用:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src"
-> ~/src
Windows的常规位置也是如此:
"startingDirectory":"C:/wd"
-> /mnt/c/wd
嗯我们也许应该添加一个设置来建议startingDirectory是wsl路径。 现在,我们只是手动设置要启动的客户端应用程序的工作目录,因此,我们必须特别知道配置文件正在尝试使用wsl,并调整传递工作目录的逻辑。
一个简单的技巧是在wsl的~/.bashrc
文件中,添加以下行cd ~
问题解决了。
一个简单的技巧是在wsl的
~/.bashrc
文件中,添加以下行cd ~
问题解决了。
这也是在计算机上使用bash的所有其他方式中获得怪异和意外行为的好方法。 :微笑:
这种方法需要一点工作。 我们可以从配置文件中的命令解析分发名称,以便wsl.exe -d Ubuntu
给我们“ Ubuntu”,然后将其传递给Profile::EvaluateStartingDirectory
。 然后,如果失败,则在将其设置为%userprofile%
我们可以评估\\WSL$\[distributionName][directory]
并查看它是否是有效的目录路径。
或者我们可以使该方法成为非静态方法,并从_commandline
绘制值。
编辑:我现在知道这将无法正常工作。 P9服务器可能尚未启动,如果已经启动,则不会将所有发行版作为可用共享加载到UNC路径下。
@ sandeepkv93-骇客不是最好的。 当说VS Code并希望在您的项目目录中打开WSL终端时,这样做可以防止这种情况。 肯定也会引起其他问题
我的解决方法
"commandline" : "wsl.exe ~ -d WLinux"
在创建一个新用户作为Windows用户的主目录/c/Users/MikeLloyd
,在我的profile.json中将startingDirectory
为~
,我刚刚编辑了/etc/passwd
。 它对我有效,如预期的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资源管理器始终将原始路径传递给Terminal。
我用
"startingDirectory": "//wsl$/Ubuntu-18.04/home/myname"
在Microsoft Windows [Version 10.0.18363.592]
,ver 0.8.100910.0
我总是在$ HOME上启动WSL的方式:
创建wt.exe的链接,
C:\ Users \ YOURNAME \ AppData \ Local \ Microsoft \ WindowsApps \ wt.exe wsl.exe〜-d Ubuntu
并将其固定在我的“开始”菜单上,并将配置文件中的“ startingDirectory”保留为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
},
容易修复
“ startingDirectory”:“ // wsl $ / Ubuntu / home /
@ troy-mac实际上将从“ home”目录开始,而不是_your_ home目录。 请参阅上面的答案以获取无数种可行的解决方案(示例)
我使用Ubuntu,解决方法是:
"commandline" : "ubuntu.exe"
容易修复
“ startingDirectory”:“ // 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个Disto打开第二个选项卡时,它们总是在〜中打开〜看来使用"startingDirectory": "//wsl$//<distroname>/home/jakob"
没有什么区别,但是使用\\
更可靠
编辑:我正在运行Insider预览版本19619和wsl2。 看来,当虚拟机启动并运行时,它们会遵循startingDirectory设置。 如果VM已停止并且在打开选项卡时必须启动,则不会。
容易修复
“ startingDirectory”:“ // 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个Disto打开第二个选项卡时,它们总是在〜中打开〜看来使用"startingDirectory": "//wsl$//<distroname>/home/jakob"
没有什么区别,但是使用\\
更可靠编辑:我正在运行Insider预览版本19619和wsl2。 看来,当虚拟机启动并运行时,它们会遵循startingDirectory设置。 如果VM已停止并且在打开选项卡时必须启动,则不会。
这是因为// wsl $ /文件夹直到wsl实例启动后才会初始化。 因此,第一个实例不会以〜开始,而其他实例将以〜开始,因为第一个实例初始化了// wsl $ /文件夹
@ troy-mac实际上将从“ home”目录开始,而不是_your_ home目录。 请参阅上面的答案以获取无数种可行的解决方案(示例)
@antoineco我正在使用Ubuntu(不确定是否重要),但确实将我放在_my_主目录/ home / troymac中,所以对我来说,我得到了我一直在寻找的结果...
没有世界可以通过执行wsl /directory
指定目录来工作。 这将(总是(不仅仅是在使用zsh时使用!))导致shell尝试执行目录,然后退出。 那绝对不是你想要的。
这事有进一步更新吗?
@maximgeerinck不。 我们将确保在存在时更新此线程。 同时,我可以推荐“订阅”按钮吗?
这样一来,您将收到有关此线程的任何更新的通知,而不必在此线程上对所有人无缘无故☺️
大家好,我知道我对我早些时候发布的建议不满意,但是我只是在新系统上安装了WSL和Ubuntu-20.04,我所做的只是将以下几行添加到settings.json文件中,并且100%为将我放入主目录而工作。 我并不是说它适用于所有人,因为我不确定经验不足的用户是否实际测试了此功能,但是它在适用于Ubuntu-20.04和18.04的两个不同系统上都对我有效。 我认为首先尝试是最简单的方法,如果对您不起作用,请在该线程上尝试一些其他建议。
“ startingDirectory”:“ //wsl$/Ubuntu-20.04/home/troy-mac”
“ startingDirectory”:“ //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]是什么,请执行以下操作:
现在,您将在资源管理器中获得文件共享。 外汇
在Windows终端中打开新选项卡时,只需遵循要从其开始的路径即可。 记得:
喜欢:
构造startingDirectory
。 重新启动Windows Terminal,一切顺利。
最有用的评论
看起来它期望使用Windows路径,但直接在AppData下传递WSL fs路径无效。 使用新的UNC路径对我有用:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src"
->~/src
Windows的常规位置也是如此:
"startingDirectory":"C:/wd"
->/mnt/c/wd