我可以在 Windows Subsystem for Linux (WSL) PATH 中创建指向 Windows 可执行文件的符号链接吗?

Uch*_*ena 6 command-line java jdk symbolic-link windows-subsystem-for-linux

我在 Windows 上安装了 Android Studio 和 JDK 8,但 JDK cli 在我的 WSL 上不可用。当我输入java或 时javac,找不到该命令。我遵循了此处的建议,现在我可以通过键入java.exeand从 WSL 访问命令javac.exe,但我不想指定.exe扩展名。我的想法是添加一个指向可执行文件的符号链接,但不必指定可执行文件的路径 ( /mnt/c/...),因为这已经在 WSL PATH 中完成了。那么我可以创建一个指向 PATH 中某个位置的符号链接吗?如果这没有意义,这就是我尝试过的:

sudo ln -s -t java.exe java
Run Code Online (Sandbox Code Playgroud)

我得到了"failed to access 'java.exe': No such file or directory"。然而,这正是我想要实现的:指向 PATH 中可执行文件的符号链接,而不指定可执行文件的实际路径,因为 PATH 已经有了。如果我疯了,这是愚蠢的/不可能的/不必要的,您可以说这是答案,我会接受!:-D

Win*_*nix 5

您需要为其路径添加可执行文件的前缀。或者,您可以修改 LinuxPATH环境变量并附加 Windows 路径(以 为前缀/mnt/c/)。

来自:用于 Linux 与 Windows 互操作性的 Windows 子系统

从 WSL 调用 Windows 二进制文件

适用于 Linux 的 Windows 子系统可以直接从 WSL 命令行调用 Windows 二进制文件。以这种方式运行的应用程序具有以下属性:

  1. 将工作目录保留为 WSL 命令提示符,下面解释的场景除外。
  2. 具有与 bash.exe 进程相同的权限。
  3. 以活动的 Windows 用户身份运行。
  4. 出现在 Windows 任务管理器中,就像直接从 CMD 提示符执行一样。

例子:

$ /mnt/c/Windows/System32/notepad.exe
Run Code Online (Sandbox Code Playgroud)

在 WSL 中,这些可执行文件的处理方式类似于本机 Linux 可执行文件。这意味着将目录添加到 Linux 路径和命令之间的管道按预期工作。例子:

$ export PATH=$PATH:/mnt/c/Windows/System32
$ notepad.exe
$ ipconfig.exe | grep IPv4 | cut -d: -f2
$ ls -la | findstr.exe foo.txt
$ cmd.exe /c dir
Run Code Online (Sandbox Code Playgroud)

Windows 二进制文件必须包含文件扩展名、匹配文件大小写并且是可执行的。包括批处理脚本和命令之类的非可执行文件dir可以使用/mnt/c/Windows/System32/cmd.exe /C命令运行。

例子:

$ /mnt/c/Windows/System32/cmd.exe /C dir
$ /mnt/c/Windows/System32/PING.EXE www.microsoft.com
Run Code Online (Sandbox Code Playgroud)

参数未经修改地传递给 Windows 二进制文件。

即使在 Linux 中,符号链接也包含路径。以这个命令为例:

$ ls -la /bin | grep ^l
(...SNIP...)
lrwxrwxrwx  1 root root      20 Jun 27 09:49 systemd -> /lib/systemd
Run Code Online (Sandbox Code Playgroud)

systemd链接到/lib/systemd/systemd. 所以你的符号链接:

sudo ln -s -t java.exe java
Run Code Online (Sandbox Code Playgroud)

我想(因为我不是链接专家)需要看起来像:

sudo ln -s -t /mnt/c/Windows/Path/To/java.exe java
Run Code Online (Sandbox Code Playgroud)

使用alias代替符号链接

我会在我的~/.bashrc文件中创建一个别名,而不是一个符号链接:

alias java='/mnt/c/WindowsPathTo/java.exe'
Run Code Online (Sandbox Code Playgroud)

然后,每当您键入javamumbo-jumbo 时,都会代表您键入。传递的任何参数都受到尊重。

  • 别名应该是第一个,但无论如何都有 **+1**... **;-)** (2认同)