我通过下载正在运行的安装程序在Windows 10上本机安装了Atom编辑器。现在,我启动WSL Ubuntu发行版,并希望使用命令atom .
从那里启动Atom(atom编辑器)或使用命令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编辑器?
答案 0 :(得分:2)
我创建了一个简短的脚本来处理我最常使用的三个原子命令(我将Ubuntu与WSL结合使用):
atom
atom .
atom RELATIVE_PATH_FILE
这个脚本没有经过优化,我相信很多人会发现一些极端的情况,但是它可以帮我完成工作。要使用它,只需将其放在~/.local/bin/atom
中,然后通过运行chmod +x ~/.local/bin/atom
使它可执行。您可能需要重新启动外壳程序才能将~/.local/bin
添加到您的路径中。为了简化操作,我将用于我的ubuntu安装的WSL网络驱动器映射到U:
,因此您要么要做同样的事情,要么在第9行相应地修改脚本。
#!/bin/bash
if [ -z $1 ]; then
pushd /mnt/c > /dev/null
/mnt/c/Windows/System32/cmd.exe /c "atom"
else
[[ $1 = "." ]] && path=$(pwd) || path=$(realpath $1)
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
获取给定文件的绝对路径。像以前一样,使用sed
调用atom之前,使用path将路径从cmd.exe
从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
答案 1 :(得分:0)
在提到的blog post @Wlad的“已知问题”部分中,声明了
访问Linux文件与访问网络资源相同,并且访问网络资源的任何规则仍然适用,例如:使用CMD时,cd \\ wsl $ \ Ubuntu \ home不起作用(因为CMD不支持UNC路径作为当前目录),但是复制\\ wsl $ \ Ubuntu \ home \ somefile.txt C:\ dev \即可
因此Atom可能会使用cmd.exe
从命令行(可能是一些批处理文件)启动自身,并且鉴于cmd.exe
无法将网络资源作为当前目录打开(已将WSL目录视为as),当您尝试从WSL Shell启动Atom时出现了故障。
实际上,在VS Code中,有一个更好的解决方案可以直接从WSL Shell启动{@ {1}}。
您可以按照以下步骤使VS Code从WSL Shell直接启动:
Remote - WSL
安装到VS Code; VS Code Remote
时,将自动安装VS Code Remote Server,并且VS Code将很快启动。通过使用code .
,您不仅可以在VS Code中打开目录,还可以在许多其他方面受益:例如,您可以将WSL Shell用作VS Code中的集成Shell并运行直接从VS Code中使用WSL编写程序。
Here是VS Code Remote
的官方文档。
答案 2 :(得分:0)
爱德华多答案中的脚本是一种很好的方法,但是不允许一次打开多个目录/存储库(例如atom terraform-modules terraform-repo
),这是我经常做的事情。
以下是我的看法:
#!/bin/bash
winPathPrefix="U:"
function convertToWinPath() {
echo "${winPathPrefix}$(realpath ${1})" | 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的脚本,应该允许使用更通用的用例
答案 3 :(得分:0)
这可能有点过时,但您可以简单地运行一个 powershell 并使用:
wsl.exe -d Ubuntu-20.04 //In my case ubuntu
这应该会打开一个 ubuntu 会话或您自己设置的任何 wsl。
在这方面有点笨拙,但会尽力提供帮助。 =)