如何在 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\AutoRun
和 HKey_Current_User\Software\Microsoft\Command Processor\AutoRun
,它们(只要未指定 /D
选项)将同时当打开新的命令提示符 window 时,检查 运行 的内容(按此顺序)。
如果我们将这两件事与 FOR
循环放在一起,并在您的用户文件夹中创建一个易于自定义的漂亮文件,我们就可以非常接近您想要的内容。
我将把它放在 HKLM 中,并引用 %USERPROFILE%
中的一个文件,名为 exportlinuxcommands
,以便所有用户都可以使用它,但很容易在每个用户的基础上进行自定义,以及仅为设置它的用户提供功能。如果您只想为一个用户使用它,或者不希望它在每个用户的基础上进行自定义,则必须稍微修改一下说明。
- 打开注册表编辑器
- 转到
HKey_Local_Machine\Software\Microsoft\Command Processor
- 右键单击 window 的空白部分,然后选择 "New" > "String Value"(或 "Expandable String Value",但是当您意识到命令处理器无论如何都会在读取值后扩展它们。)
- 将其命名为 "AutoRun"(不带引号)
- 双击刚刚创建的新值
- 输入
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}"
我想从 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\AutoRun
和HKey_Current_User\Software\Microsoft\Command Processor\AutoRun
,它们(只要未指定/D
选项)将同时当打开新的命令提示符 window 时,检查 运行 的内容(按此顺序)。
如果我们将这两件事与 FOR
循环放在一起,并在您的用户文件夹中创建一个易于自定义的漂亮文件,我们就可以非常接近您想要的内容。
我将把它放在 HKLM 中,并引用 %USERPROFILE%
中的一个文件,名为 exportlinuxcommands
,以便所有用户都可以使用它,但很容易在每个用户的基础上进行自定义,以及仅为设置它的用户提供功能。如果您只想为一个用户使用它,或者不希望它在每个用户的基础上进行自定义,则必须稍微修改一下说明。
- 打开注册表编辑器
- 转到
HKey_Local_Machine\Software\Microsoft\Command Processor
- 右键单击 window 的空白部分,然后选择 "New" > "String Value"(或 "Expandable String Value",但是当您意识到命令处理器无论如何都会在读取值后扩展它们。)
- 将其命名为 "AutoRun"(不带引号)
- 双击刚刚创建的新值
- 输入
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}"