我希望能够atom .
在 WSL 中输入并使用当前目录打开 Atom。
我尝试添加alias atom='/mnt/c/Users/Leo/AppData/Local/atom/atom.exe'
到我的.bashrc
。它打开了 Atom,但不在当前目录中。
如果我添加alias atom='/mnt/c/Users/Leo/AppData/Local/atom/app-1.14.4/atom.exe'
,它就可以工作,但是每次 Atom 更新时我都必须更新它。
有没有更好的办法?
答案1
我设法打开(Windows 版本)我的 WSL 中的 Atom 使用了 Josh Brobst 的建议并做了一些改进。
我可以想出两种不同的方法。
- 让 Atom 打开你当前的工作目录
我通过升级提到 Josh Brobst 的建议来做到这一点:
alias atom='/mnt/c/Windows/System32/cmd.exe /c "atom /PathToYourWSLRootFs/$PWD"'
这将使 Atom 通过 Windows 文件系统进入你的 WLS 目录,其中包含根文件系统
之后,将/$PWD
其扩展为当前目录(WSL 系统内部)的完整路径,并将其附加到包含 WLS 文件系统的目录路径中
这样 Atom 就会将当前工作目录的完整路径作为参数,并将其作为文件夹打开
- 让 Atom 打开特定文件
为此,我编写了一个简单的 bash 脚本,atom
您可以在 WSL 中创建一个别名,它将运行此脚本,而不必遍历您的PATH
.
#!/bin/bash
/mnt/c/Windows/System32/cmd.exe /c "atom ./rootfs$PWD/$1"
其中“./rootfs”是我的 ArchLinux 根文件系统的路径(在 Windows fs 中)。当然,您需要像这样放置您的:"atom /pathToYourWslRootFs/$PWD/$1"
$PWD
将再次将路径附加到当前工作目录(在 WSL 内部)
$1
然后将附加你启动脚本的参数
用法:该脚本的内容如下:
1)cd 到包含所需文件的目录
2)运行:atom desired_file_name
注意:为了使步骤 2)正常工作,您需要为脚本设置别名,将其放在包含在目录中$PATH
,或者通过提供脚本的完整路径来运行它
这两种方法对我来说都很有效。我并不是说这个脚本写得再好不过了,只是我不需要它更好。然而,我认为这应该让每个人都有一个解决这个问题的基本思路,并有机会让他们的脚本完全符合自己的喜好。
我希望这对某人有帮助。
答案2
我创建了一个简短的脚本来处理我最常用的三个 atom 命令(我使用带有 WSL 的 Ubuntu):
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 $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
该脚本执行几个简单的步骤。首先,如果没有命令行参数,它只需使用 调用 atomcmd.exe
而不使用参数。如果命令行参数是.
,它会获取当前目录的路径,否则,它会使用 获取给定文件的绝对路径。在调用 atom 之前,realpath
使用 将路径从 POSIX 格式转换为 Windows 格式,与之前一样,但带有路径参数。sed
cmd.exe
pushd
和命令popd
只是为了消除有关不支持 UNC 路径的烦人的警告消息:
...
CMD.EXE was started with the above path as the current directory.
UNC paths are not supported. Defaulting to Windows directory
答案3
尝试这个:
alias atom='/mnt/c/Windows/System32/cmd.exe /c "atom ."'
为了使 atom cli 可用于 cmd、cygwin 和 msys,atom 会将其放入C:\Users\<name>\AppData\Local\atom\bin
Windows 本地用户的 PATH 环境变量中。因此,此别名应atom.cmd
使用您当前的 bash 目录从该位置运行。当然,如果出于某种原因它不在 Windows PATH 中,只需将 atom 替换为 atom.cmd 的 Windows 绝对路径即可。
我不能 100% 地确定.
cmd 所看到的将是 Windows Bash 中的当前目录,不幸的是无法对其进行测试(不是在内部版本上),但是互操作博客文章让我认为它应该可以工作(假设你在 bash 中的某个地方/mnt/<drive letter>/
):
如果已启动的 NT 进程的当前工作目录位于 DrvFs 挂载内的某个位置,它将被 NT 进程继承。