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

ber*_*ers 10 shortcut windows-subsystem-for-linux

我想ls在Windows 10的命令行中使用许多其他Linux工具.我知道有GnuWin32和其他二进制替代品,但这些都不如Windows子系统Linux(WSL)那样优雅; 包括更新机制.

使用WSL,可以ls ...从命令行调用bash -c "ls ...",这非常有效.但是,理想情况下,我只需ls在命令行上输入.我可以创建一个ls.bat基本上@bash -c "ls %*"- 但我必须为我想要导出的每个命令执行此操作.是否有更直接的方式将ls(和许多其他人)导出到命令行?

nik*_*eee 18

显然,这是WSL最受欢迎的功能,Microsoft现在支持此功能.要在命令提示符(或PowerShell)中使用linux命令,只需在命令前加上wsl.所以,例如,这是你如何ls从CMD 运行.

C:\temp> wsl ls
<- contents of C:\temp ->
Run Code Online (Sandbox Code Playgroud)

或者这是您更新包列表的方式.

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]
Run Code Online (Sandbox Code Playgroud)

更多细节可以在官方文档中找到.我不确定您是否在寻找不涉及任何前缀的解决方案.如果是这样的话,我还不知道任何解决方案.

  • 再见,Cygwin! (8认同)

3D1*_*T0R 5

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

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

如果我们将这两件事与一个FOR循环放在一起,并将一个漂亮的,易于自定义的文件放在您的用户文件夹中,那么我们可以非常近似地认为我想要的东西。
我将其放在HKLM中,并在中引用一个%USERPROFILE%名为的文件exportlinuxcommands,以便所有用户都可以使用,但可以轻松地按用户自定义,并且仅对设置该文件的用户起作用。如果只希望一个用户使用它,或者不希望每个用户对其进行自定义,则必须对说明进行一些修改。

  1. 打开注册表编辑器
  2. HKey_Local_Machine\Software\Microsoft\Command Processor
  3. 右键单击窗口的空白部分,然后选择“新建”>“字符串值”(或“可扩展的字符串值”),但是当您意识到命令处理器在读取命令后将对其进行扩展时,这些扩展似乎毫无意义。仍然有价值。)
  4. 将其命名为“ AutoRun”(不带引号)
  5. 双击刚刚创建的新值
  6. 输入IF EXIST %USERPROFILE%\exportlinuxcommands FOR /F %i in (%USERPROFILE%\exportlinuxcommands) DO @doskey %i=bash -c "%i $*"作为“值数据”。

现在,您只需要在您的%USERPROFILE%文件夹(即C:\Users\YourUserName)中创建一个文件exportlinuxcommands,并在每行Linux命令中都使用别名即可。例如:

ls
rm
cat
Run Code Online (Sandbox Code Playgroud)

要删除一个吗?从文件中删除它,它将不会在打开的下一个命令提示符窗口中显示。
是否想稍后再添加?只需将其添加到自己的文件中,下次打开“命令提示符”窗口时,它将出现在该文件中。