如何从WSL(Ubuntu)中启动安装在Windows上的Atom或VSCode?

2hh7jdfx  于 2022-10-27  发布在  Windows
关注(0)|答案(6)|浏览(274)

我已经通过下载运行安装程序在Windows10上本地安装了Atom编辑器。现在,我启动了WSL Ubuntu发行版,并想从那里用命令atom .启动Atom(ATOM-EDITOR),或者用命令code .启动VSCode(VSCode)
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 WSL、VirtualMachines(VM)甚至Containers上使用VSCode。查看VSCode的remote-development plugin
nuypyhwy

nuypyhwy1#

我创建了一个简短的脚本来处理我最常用的三个ATOM命令(我使用Ubuntu和WSL):
1.atom
1.atom .
1.atom RELATIVE_PATH_FILE
这个脚本没有经过优化,我相信很多人都会发现边缘情况,但它已经为我完成了工作。要使用它,只需将其放在~/.local/bin/atom中,并通过运行chmod +x ~/.local/bin/atom使其可执行。您可能需要重新启动外壳,才能将~/.local/bin添加到您的路径中。为了稍微简化一些,我将我的ubuntu安装的WSL网络驱动器Map到了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获取给定文件的绝对路径。在像以前一样使用cmd.exe调用ATOM之前,使用sed将路径从POSIX转换为Windows格式,但使用路径参数。
pushdpopd命令只是为了消除有关不支持UNC路径的恼人警告消息:

...
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported.  Defaulting to Windows directory
jc3wubiy

jc3wubiy2#

在提到的blog post@Wlad的“已知问题”部分中,有这样的声明
访问Linux文件与访问网络资源相同,任何访问网络资源的规则仍将适用,例如:使用CMD时,CD\WSL$\Ubuntu\home将不起作用(因为CMD不支持UNC路径作为当前目录),但Copy\wsl$\Ubuntu\home\Somefile.txt C:\Dev\将起作用
因此,由于Atom可能使用cmd.exe从命令行(可能是某个批处理文件)启动自身,并且考虑到cmd.exe不能将网络资源作为当前目录(WSL目录被视为当前目录)打开,所以在尝试从WSL外壳启动Atom时出现了失败。
实际上,在VS代码中有一个更好的解决方案,可以直接从WSL外壳启动VS代码:VS Code Remote
您可以采取以下步骤,使VS代码能够直接从WSL外壳启动:
1.在Windows端安装VS Code的扩展Remote - WSL
1.然后,当您在您的WSL外壳中键入code .时,将自动安装VS Code Remote Server,并且VS Code将很快启动。
通过使用VS Code Remote,您不仅可以在VS Code中打开目录,还可以在许多其他方面受益:例如,您可以在VS Code中使用WSL外壳作为集成外壳,并直接从VS Code中运行WSL中的程序。
HereVS Code Remote - WSL的官方文档。

8fq7wneg

8fq7wneg3#

Eduardo答案中的脚本是一个很好的方法,但不允许同时打开多个目录/repos(例如,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的脚本,应该允许更一般的用例

yhuiod9q

yhuiod9q4#

我想从WSL运行Atom,但不幸的是,公认的答案没有提到Atom,其他与Atom相关的变通方法不再起作用。
以防有人在谷歌上搜索这个问题,结果出现在这里。这里有一个实际的解决方法(它将在新的Atom更新中中断)。

  • 在Windows环境中添加以下路径:C:\Users\{username}\AppData\Local\atom\app-{version}\(本文发布时版本为1.60.0 so app-1.60.0
  • 使用上面提到的路径,因为默认路径包含将在WSL中运行失败的bash可执行文件。
  • 这是它将在未来的更新中突破的地方。修复方法是将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终端。
epfja78i

epfja78i5#

我编写了一个bash脚本来打开带有和不带有来自WSL2的文件的ATOM。它可以在任何驱动器上处理任意数量(包括0)的文件参数。支持相对路径和绝对路径,但不能处理包含..的路径名。或者~。将ATOM指向一位董事也会起到预期的作用。以下是我的剧本:


# !/bin/bash

atom_cmd="/mnt/c/Users/`whoami`/AppData/Local/atom/atom.exe"
for i in "$@"; do
if [[ $i == /mnt* ]]; then 
    linPath="$i" #for absolute file paths
else 
    linPath="`pwd`/$i" #for relative file paths
fi
if [[ $linPath == *".."* || $linPath != "/mnt"* || $i == "/home"* ]] ; then
    echo "atom script is unacceptable file path $linPath"
    continue 1
fi
winPath="\""`echo $linPath | sed -e 's|\/mnt\/\([a-z]\)|\u\1:|' -e 's:\/:\\\\:g'`""
atom_cmd="$atom_cmd $winPath\""
done
unset linPath
unset winPath
echo "command:" "$atom_cmd"
eval "$atom_cmd"
unset atom_cmd

(我相信这方面还有一些需要改进的地方,比如边缘情况和更好地使用语言功能。我欢迎大家的建议。)

czq61nw1

czq61nw16#

这可能有点过时了,但您可以简单地运行PowerShell并使用:

wsl.exe -d Ubuntu-20.04 //In my case ubuntu

这应该会打开一个ubuntu会话或您自己设置的任何WSL。
在这件事上有点小题大做,但我想帮上忙。=)

相关问题