如何从Windows10的Bash Shell运行Windows程序

在创建者更新中,Windows10的Bash shell现在允许您直接从Bash运行Windows二进制文件和标准命令提示符命令。您可以从同一个Bash shell运行Linux和Windows程序,甚至可以将Windows命令合并到一个Bash脚本中。

你需要知道的是

相关:Windows10的新Bash Shell让您无所不能

以下是您需要了解的有关此功能的一些基本信息:

用户帐户:从Bash shell启动的程序将运行,就像它们是由当前Windows用户帐户启动的一样。 权限:这些程序将具有与Bash.exe进程相同的权限。因此,如果希望这些命令具有管理员访问权限,则需要以管理员身份运行Bash shell。 工作目录:Windows程序与Bash shell共享相同的“工作目录”,因此,如果您运行一个列出当前目录内容的命令,它将在Bash shell中列出当前工作目录的内容。使用cd命令更改工作目录。

考虑到这一点,让我们来看看如何运行程序。

如何运行Windows程序

相关:如何在Windows中访问Ubuntu Bash文件(以及在Bash中访问Windows系统驱动器)

要运行Windows程序,请在Bash shell中输入该程序的.exe文件的路径。请记住,您的Windows C:驱动器位于Bash中的/mnt/c。Bash环境也区分大小写,因此您必须指定正确的大小写。

假设您要启动位于C:\WINDOWS\System32\PING.EXE的Ping实用程序。您需要运行以下命令:

/mnt/c/Windows/System32/PING.EXE

以下命令不起作用,因为Bash区分大小写:

/mnt/c/windows/system32/ping.exe

如果路径包含复杂字符(如空格和方括号,如Program Files文件夹),则会稍微复杂一些。您必须通过在空格、方括号和其他复杂字符前面加上“\”字符来对它们进行“转义”。

例如,假设您要运行位于以下位置的Internet Explorer程序:C:\Program Files(X86)\Internet Explorer\iexplore.exe。您必须在Bash中运行以下命令:

/mnt/c/Program\ Files\ \(x86\)/Internet\ Explorer/iexplore.exe

请注意空格和方括号字符前的“\”。这些字符必须“转义”,否则Bash不会意识到这些字符是文件路径的一部分。

如何将参数传递给命令

Bash shell将参数直接传递给您执行的命令。

例如,如果您想要ping example.com,您可以运行:

/mnt/c/Windows/System32/PING.EXE example.com

或者,如果要在记事本中打开Windows主机文件,请运行:

/mnt/c/Windows/System32/notepad.exe "C:\Windows\System32\drivers\etc\hosts"

将文件路径直接传递给Windows程序时,可以使用标准Windows文件路径。这是因为Bash直接传递参数。Notepad.exe和其他Windows程序需要Windows文件路径。

如何运行内置命令

某些Windows命令不是.exe文件,但内置于命令提示符本身。例如,这包括通常在命令提示符下运行的dir命令。要运行这样的命令,您需要运行与命令提示符相关联的cmd.exe二进制文件,并将命令作为参数与/C一起传递给它,如下所示:

/mnt/c/Windows/System32/cmd.exe /C command

例如,要运行命令提示符中内置的dir命令,您需要运行以下命令:

/mnt/c/Windows/System32/cmd.exe /C dir

如何将目录添加到路径

Windows Services for Linux环境处理Windows可执行文件的方式与处理Linux二进制文件的方式相似。这意味着您可以将包含.exe文件的目录添加到路径中,然后直接执行这些.exe文件。例如,要将System32目录添加到路径中,您可以运行:

export PATH=$PATH:/mnt/c/Windows/System32

然后,您可以直接运行位于System32文件夹中的Windows.exe文件,如下所示:

PING.exe example.comnotepad.execmd.exe /C dir

如何将一个命令的输出通过管道传输到另一个命令

Windows命令的输出可以通过管道传输到Linux命令,反之亦然。例如,您可以使用iipconfig.exe-all命令列出有关网络接口的详细信息,并通过管道将其传递给Linux grep命令以搜索输出。例如,要列出有关您的连接的所有信息并搜索与“IPv4地址”匹配的部分,您可以运行:

/mnt/c/Windows/System32/ipconfig.exe -all | grep "IPv4 Address"

这是基本的过程。当将这些命令合并到Bash脚本中时,它们也会起作用,因此您可以编写包含Windows命令和Linux实用程序的Bash脚本。如果它在Bash shell中运行,那么它将在Bash脚本中工作。

如果您想采用另一种方式,可以使用“bash-c”命令从标准的Windows命令提示符运行Bash命令。

相关:如何在Windows 10上创建和运行Bash Shell脚本

相关文章