如何从 WSL (Ubuntu) 中启动原生安装在 Windows 上的 Atom 或 VSCode?
How to start Atom or VSCode natively installed on Windows from within WSL (Ubuntu)?
我通过下载 运行 安装程序在 Windows 10 上本地安装了 Atom 编辑器。现在我启动 WSL Ubuntu 发行版并希望使用命令 atom .
或 VSCode(visual-studio-code)从那里启动 Atom(atom-editor)和命令 code .
Atom 启动,但不在执行命令的目录中,而是显示来自 C:\Windows
的文件。此外 Ubuntu WSL 终端显示以下错误消息:
atom .
grep: /etc/wsl.conf: No such file or directory
"\wsl$\Ubuntu-18.04\home\wlad\projects\udemy\flask-bootcamp\Flask-Bootcamp-master"
CMD.EXE wurde mit dem oben angegebenen Pfad als aktuellem Verzeichnis gestartet.
UNC-Pfade werden nicht unterstützt.
Stattdessen wird das Windows-Verzeichnis als aktuelles Verzeichnis gesetzt.
抱歉,它是德语本地化版,但上面写着类似 UNC-paths are not supported
的内容
(尚未测试 VSCode)
那么如何在 WSL 中使用安装在 Windows 10 上的 Atom 或 VSCode 编辑器?
** 更新 **
从今天(2020 年 4 月)开始,有一种更好的方法可以在 Windows 上使用 VSCode w/ WSL、虚拟机 (VM) 甚至容器。查看 remote-development plugin VSCode。
在提到的 blog post @Wlad 的 "Known issues" 部分,有说明
Accessing Linux files is treated the same as accessing a network resource, and any rules for accessing network resources will still apply e.g: When using CMD, cd \wsl$\Ubuntu\home will not work (as CMD does not support UNC paths as current directories), however copy \wsl$\Ubuntu\home\somefile.txt C:\dev\ will work
因此 Atom 可能会使用 cmd.exe
从命令行(可能是一些批处理文件)启动自身,并且鉴于 cmd.exe
无法将网络资源打开为当前目录(WSL 目录)被视为),当您尝试从 WSL shell.
启动 Atom 时出现故障
实际上,在 VS Code 中有一个更好的解决方案可以直接从 WSL 启动 VS Code shell:VS Code Remote
.
您可以通过以下步骤让VS Code直接从WSL启动shell:
- 在 Windows 端安装扩展
Remote - WSL
到 VS Code;
- 然后当您在 WSL shell 中键入
code .
时,VS Code 远程服务器将自动安装,VS Code 将很快启动。
使用VS Code Remote
,不仅可以在VS Code中打开目录,还可以在很多方面受益:比如可以使用WSL shell作为集成shell 在 VS Code 中,运行 程序在 WSL 中直接来自 VS Code。
Here 是 VS Code Remote - WSL
.
的官方文档
我创建了一个简短的脚本来处理我最常用的三个原子命令(我使用 Ubuntu 和 WSL):
atom
atom .
atom RELATIVE_PATH_FILE
此脚本未优化,我相信很多人会发现边缘情况,但它为我完成了工作。要使用它,只需将它放在 ~/.local/bin/atom
中并使其可由 运行 chmod +x ~/.local/bin/atom
执行。您可能需要重新启动 shell 才能将 ~/.local/bin
添加到您的路径中。为了稍微简化一些事情,我将 ubuntu 安装的 WSL 网络驱动器映射到 U:
,所以你要么想做同样的事情,要么在第 9 行相应地修改脚本。
#!/bin/bash
if [ -z ]; then
pushd /mnt/c > /dev/null
/mnt/c/Windows/System32/cmd.exe /c "atom"
else
[[ = "." ]] && path=$(pwd) || path=$(realpath )
winPath=$(echo "U:$path" | sed -e 's/\//\/g')
pushd /mnt/c > /dev/null
/mnt/c/Windows/System32/cmd.exe /c "atom $winPath"
fi
popd > /dev/null
该脚本执行几个简单的步骤。首先,如果没有命令行参数,它只是使用 cmd.exe
不带参数调用 atom。如果命令行参数是 .
,它获取当前目录的路径,否则,它使用 realpath
获取给定文件的绝对路径。在像以前一样使用 cmd.exe
调用 atom 之前,使用 sed
将路径从 POSIX 转换为 Windows 格式,但使用路径参数。
pushd
和 popd
命令只是用来消除有关不支持 UNC 路径的恼人警告消息:
...
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory
Eduardo 回答中的脚本是一个很好的方法,但不允许一次打开多个 directories/repos(例如 atom terraform-modules terraform-repo
),而我经常这样做。
以下是我的转折:
#!/bin/bash
winPathPrefix="U:"
function convertToWinPath() {
echo "${winPathPrefix}$(realpath )" | sed -e 's/\//\/g'
}
declare -a atomCmd=(/mnt/c/Windows/System32/cmd.exe /c "atom")
for path in "$@"; do
atomCmd+=($(convertToWinPath ${path}))
done
${atomCmd[@]} 2>/dev/null
这完全基于 Eduardo 的脚本,应该允许更通用的用例
这可能有点过时,但您可以简单地 运行 一个 powershell 并使用:
wsl.exe -d Ubuntu-20.04 //In my case ubuntu
这应该会打开一个 ubuntu 会话或您自己设置的任何 wsl。
在这方面有点笨,但会尽力提供帮助。 =)
想要 运行 来自 WSL 的 Atom 让我来到这里,但不幸的是,接受的答案没有提到 atom,其他与 atom 相关的解决方法不再有效。
以防有人用谷歌搜索问题并最终出现在这里。这是一个实际的解决方法(它会在新的 Atom 更新中中断)。
在windows环境中添加以下路径路径:C:\Users\{username}\AppData\Local\atom\app-{version}\
(此时post版本为1.60.0
所以app-1.60.0
.
- 使用上面提到的路径,因为默认路径包含一个 bash 可执行文件,它将 运行 在 wsl 中 运行 失败。
- 这是它在以后的更新中会出现问题的地方。解决方法是将 windows 中的 env 更新为新路径,因为 exe 所在的文件夹将更改以匹配 atom 的版本。
在您的 .bashrc
或 .zshrc
中添加以下内容:
- 重要的是在
.bashrc
或 .zshrc
中添加,因为在 /usr/bin
中创建单独的脚本将始终使 atom 在 C:/Windows
文件夹中打开。
function _atom () { exec nohup atom.exe "$@" &> /dev/null & } # Do not output in terminal and do not block the terminal. Also send the command arguments to atom.
alias atom="_atom"
- 打开一个新的 wsl 终端。
我通过下载 运行 安装程序在 Windows 10 上本地安装了 Atom 编辑器。现在我启动 WSL Ubuntu 发行版并希望使用命令 atom .
或 VSCode(visual-studio-code)从那里启动 Atom(atom-editor)和命令 code .
Atom 启动,但不在执行命令的目录中,而是显示来自 C:\Windows
的文件。此外 Ubuntu WSL 终端显示以下错误消息:
atom .
grep: /etc/wsl.conf: No such file or directory
"\wsl$\Ubuntu-18.04\home\wlad\projects\udemy\flask-bootcamp\Flask-Bootcamp-master"
CMD.EXE wurde mit dem oben angegebenen Pfad als aktuellem Verzeichnis gestartet.
UNC-Pfade werden nicht unterstützt.
Stattdessen wird das Windows-Verzeichnis als aktuelles Verzeichnis gesetzt.
抱歉,它是德语本地化版,但上面写着类似 UNC-paths are not supported
(尚未测试 VSCode)
那么如何在 WSL 中使用安装在 Windows 10 上的 Atom 或 VSCode 编辑器?
** 更新 ** 从今天(2020 年 4 月)开始,有一种更好的方法可以在 Windows 上使用 VSCode w/ WSL、虚拟机 (VM) 甚至容器。查看 remote-development plugin VSCode。
在提到的 blog post @Wlad 的 "Known issues" 部分,有说明
Accessing Linux files is treated the same as accessing a network resource, and any rules for accessing network resources will still apply e.g: When using CMD, cd \wsl$\Ubuntu\home will not work (as CMD does not support UNC paths as current directories), however copy \wsl$\Ubuntu\home\somefile.txt C:\dev\ will work
因此 Atom 可能会使用 cmd.exe
从命令行(可能是一些批处理文件)启动自身,并且鉴于 cmd.exe
无法将网络资源打开为当前目录(WSL 目录)被视为),当您尝试从 WSL shell.
实际上,在 VS Code 中有一个更好的解决方案可以直接从 WSL 启动 VS Code shell:VS Code Remote
.
您可以通过以下步骤让VS Code直接从WSL启动shell:
- 在 Windows 端安装扩展
Remote - WSL
到 VS Code; - 然后当您在 WSL shell 中键入
code .
时,VS Code 远程服务器将自动安装,VS Code 将很快启动。
使用VS Code Remote
,不仅可以在VS Code中打开目录,还可以在很多方面受益:比如可以使用WSL shell作为集成shell 在 VS Code 中,运行 程序在 WSL 中直接来自 VS Code。
Here 是 VS Code Remote - WSL
.
我创建了一个简短的脚本来处理我最常用的三个原子命令(我使用 Ubuntu 和 WSL):
atom
atom .
atom RELATIVE_PATH_FILE
此脚本未优化,我相信很多人会发现边缘情况,但它为我完成了工作。要使用它,只需将它放在 ~/.local/bin/atom
中并使其可由 运行 chmod +x ~/.local/bin/atom
执行。您可能需要重新启动 shell 才能将 ~/.local/bin
添加到您的路径中。为了稍微简化一些事情,我将 ubuntu 安装的 WSL 网络驱动器映射到 U:
,所以你要么想做同样的事情,要么在第 9 行相应地修改脚本。
#!/bin/bash
if [ -z ]; then
pushd /mnt/c > /dev/null
/mnt/c/Windows/System32/cmd.exe /c "atom"
else
[[ = "." ]] && path=$(pwd) || path=$(realpath )
winPath=$(echo "U:$path" | sed -e 's/\//\/g')
pushd /mnt/c > /dev/null
/mnt/c/Windows/System32/cmd.exe /c "atom $winPath"
fi
popd > /dev/null
该脚本执行几个简单的步骤。首先,如果没有命令行参数,它只是使用 cmd.exe
不带参数调用 atom。如果命令行参数是 .
,它获取当前目录的路径,否则,它使用 realpath
获取给定文件的绝对路径。在像以前一样使用 cmd.exe
调用 atom 之前,使用 sed
将路径从 POSIX 转换为 Windows 格式,但使用路径参数。
pushd
和 popd
命令只是用来消除有关不支持 UNC 路径的恼人警告消息:
...
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory
Eduardo 回答中的脚本是一个很好的方法,但不允许一次打开多个 directories/repos(例如 atom terraform-modules terraform-repo
),而我经常这样做。
以下是我的转折:
#!/bin/bash
winPathPrefix="U:"
function convertToWinPath() {
echo "${winPathPrefix}$(realpath )" | sed -e 's/\//\/g'
}
declare -a atomCmd=(/mnt/c/Windows/System32/cmd.exe /c "atom")
for path in "$@"; do
atomCmd+=($(convertToWinPath ${path}))
done
${atomCmd[@]} 2>/dev/null
这完全基于 Eduardo 的脚本,应该允许更通用的用例
这可能有点过时,但您可以简单地 运行 一个 powershell 并使用:
wsl.exe -d Ubuntu-20.04 //In my case ubuntu
这应该会打开一个 ubuntu 会话或您自己设置的任何 wsl。
在这方面有点笨,但会尽力提供帮助。 =)
想要 运行 来自 WSL 的 Atom 让我来到这里,但不幸的是,接受的答案没有提到 atom,其他与 atom 相关的解决方法不再有效。
以防有人用谷歌搜索问题并最终出现在这里。这是一个实际的解决方法(它会在新的 Atom 更新中中断)。
在windows环境中添加以下路径路径:
C:\Users\{username}\AppData\Local\atom\app-{version}\
(此时post版本为1.60.0
所以app-1.60.0
.- 使用上面提到的路径,因为默认路径包含一个 bash 可执行文件,它将 运行 在 wsl 中 运行 失败。
- 这是它在以后的更新中会出现问题的地方。解决方法是将 windows 中的 env 更新为新路径,因为 exe 所在的文件夹将更改以匹配 atom 的版本。
在您的
.bashrc
或.zshrc
中添加以下内容:- 重要的是在
.bashrc
或.zshrc
中添加,因为在/usr/bin
中创建单独的脚本将始终使 atom 在C:/Windows
文件夹中打开。
- 重要的是在
function _atom () { exec nohup atom.exe "$@" &> /dev/null & } # Do not output in terminal and do not block the terminal. Also send the command arguments to atom.
alias atom="_atom"
- 打开一个新的 wsl 终端。