如何在 Windows 命令行中通过 WSL 调用 Linux 命令?

How to call Linux commands through WSL in Windows command line?

我想从 Windows 10 上的命令行使用 ls 和许多其他 Linux 工具。我知道有 GnuWin32 和其他二进制替代品,但是其中 none 与 Linux (WSL) 的 Windows 子系统一样优雅;包括更新机制。

使用 WSL,可以通过 bash -c "ls ..." 从命令行调用 ls ...,效果很好。然而,理想情况下,我会在命令行中键入 ls。我可以创建一个 ls.bat ,它基本上执行 @bash -c "ls %*" - 但我必须为我想要导出的每个命令都这样做。是否有更直接的方法将 ls(以及许多其他方法)导出到命令行?

Microsoft 不直接支持您的要求,但是...

  • 您可以使用 doskey.exe 创建“Console Alias”,但是这些 控制台别名不是永久性的(当您打开一个新命令时 提示window他们都走了)。
  • CMD /? 通知我们以下两个注册表项:HKey_Local_Machine\Software\Microsoft\Command Processor\AutoRunHKey_Current_User\Software\Microsoft\Command Processor\AutoRun,它们(只要未指定 /D 选项)将同时当打开新的命令提示符 window 时,检查 运行 的内容(按此顺序)。

如果我们将这两件事与 FOR 循环放在一起,并在您的用户文件夹中创建一个易于自定义的漂亮文件,我们就可以非常接近您想要的内容。
我将把它放在 HKLM 中,并引用 %USERPROFILE% 中的一个文件,名为 exportlinuxcommands,以便所有用户都可以使用它,但很容易在每个用户的基础上进行自定义,以及仅为设置它的用户提供功能。如果您只想为一个用户使用它,或者不希望它在每个用户的基础上进行自定义,则必须稍微修改一下说明。

  1. 打开注册表编辑器
  2. 转到HKey_Local_Machine\Software\Microsoft\Command Processor
  3. 右键单击 window 的空白部分,然后选择 "New" > "String Value"(或 "Expandable String Value",但是当您意识到命令处理器无论如何都会在读取值后扩展它们。)
  4. 将其命名为 "AutoRun"(不带引号)
  5. 双击刚刚创建的新值
  6. 输入 IF EXIST %USERPROFILE%\exportlinuxcommands FOR /F %i in (%USERPROFILE%\exportlinuxcommands) DO @doskey %i=bash -c "%i $*" 作为 "Value data"。

现在您只需要在 %USERPROFILE% 文件夹(即 C:\Users\YourUserName)中创建一个名为 exportlinuxcommands 的文件,每个 Linux 命令都需要一个别名一条单独的线。例如:

ls
rm
cat

要删除一个吗?从文件中删除它,它不会出现在您打开的下一个命令提示符 window 中。
想稍后添加另一个?只需将它添加到文件中它自己的行,下次您打开命令提示符 window 时,它就会在那里。

显然这是 most requested feature for WSL,Microsoft 现在支持此功能。要在命令提示符(或 PowerShell)中使用 linux 命令,只需在命令前加上 wsl 前缀。因此,例如,这就是您如何从 CMD 运行 ls

C:\temp> wsl ls
<- contents of C:\temp ->

或者这里是更新包列表的方法。

C:\temp> wsl sudo apt-get update
[sudo] password for username:
Hit:1 http://archive.ubuntu.com/ubuntu xenial InRelease
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]

可以在 official docs 中找到更多详细信息。 我不确定您是否正在寻找不涉及任何前缀的解决方案。如果是这样的话,我还不知道有什么解决办法。

尝试使用windowsBash

运行下面的命令在Windows里面Bash生成命令的快捷方式

wget https://raw.githubusercontent.com/aleppos/windowsBash/master/windowsBash -P /usr/bin && chmod 0777 /usr/bin/windowsBash && windowsBash

然后只需将以下目录添加到您在 Windows 中的路径 * C:\windowsBash

当您想要更新命令列表时,只需再次 运行 Shell 文件

windowsBash

在windows终端点击设置打开settings.json 你会在那里找到你的发行版设置。添加此行:

"startingDirectory": "\\wsl$\{YOUR DISTRO}\home\{YourUsername}"