Terminal: 支持WSL发行版的“ startingDirectory”的Linux路径

创建于 2019-05-08  ·  38评论  ·  资料来源: microsoft/terminal

  • 您的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在根文件夹中启动
issue1

  1. 在此配置中:-
{
        "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用户文件夹中启动
issue2

  • 有什么问题/应该怎么做:
    startingDirectory配置文件设置未正确应用于wsl配置文件
Area-Settings Area-TerminalControl Help Wanted Issue-Feature Product-Terminal

最有用的评论

看起来它期望使用Windows路径,但直接在AppData下传递WSL fs路径无效。 使用新的UNC路径对我有用:
"startingDirectory":"//wsl$/Ubuntu/home/cem/src" -> ~/src

Windows的常规位置也是如此:
"startingDirectory":"C:/wd" -> /mnt/c/wd

所有38条评论

看起来它期望使用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中,所以对我来说,我得到了我一直在寻找的结果...

@ troy-mac我刚刚在Ubuntu上尝试过,但没有。 您可能在设置文件或bashrc文件中还有另一个指令,但是仅此一项就不会_not_将您置于主目录中。

无论如何,我的主要观点是,我们应该使该线程中没有错误的信息。 提出了一个解决方案,而不是分享不正确的替代技巧。

对我来说(也许是由于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时使用!))导致shell尝试执行目录,然后退出。 那绝对不是你想要的。

这事有进一步更新吗?

@maximgeerinck不。 我们将确保在存在时更新此线程。 同时,我可以推荐“订阅”按钮吗?
image
这样一来,您将收到有关此线程的任何更新的通知,而不必在此线程上对所有人无缘无故☺️

大家好,我知道我对我早些时候发布的建议不满意,但是我只是在新系统上安装了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]是什么,请执行以下操作:

  1. Win + R
  2. \\ wsl $
  3. 点击进入

现在,您将在资源管理器中获得文件共享。 外汇

image

在Windows终端中打开新选项卡时,只需遵循要从其开始的路径即可。 记得:

  1. 开始时有四个反斜线,
  2. 文件夹名称之间有两个反斜杠

喜欢:
image

构造startingDirectory 。 重新启动Windows Terminal,一切顺利。

此页面是否有帮助?
0 / 5 - 0 等级

相关问题

warpdesign picture warpdesign  ·  3评论

wkbrd picture wkbrd  ·  3评论

ghost picture ghost  ·  3评论

zadjii-msft picture zadjii-msft  ·  3评论

dev-logan picture dev-logan  ·  3评论