为什么我可以 运行 更少,grep 并在 Windows Powershell 中找到?

Why I can run less, grep and find in Windows Powershell?

一位朋友告诉我 Windows PowerShell 没有这些 Unix 风格的命令。好吧,我试过了,发现我实际上可以 运行 这些。

现在我想知道为什么会这样。难道是因为我在这台Windows机器上安装了NodeJs?

如果默认情况下它们在 Windows PowerShell 中不可用,有没有办法找出究竟是什么让它们在此 Windows 安装中使用?

运行 Windows 8.1.


对于那些感兴趣的人,根据选择的答案,我发现在这台机器上安装 Git 可以使用这些命令:

PS C:\Users\myusername> where.exe grep
C:\Users\myusername\AppData\Local\Programs\Git\usr\bin\grep.exe

PS C:\Users\myusername> where.exe less
C:\Users\myusername\AppData\Local\Programs\Git\usr\bin\less.exe

你可以试试这个

where.exe find
where.exe less
where.exe grep

如果您的 PC 上存在这些工具,他们将 return 提供 exe 文件的路径。你总是可以 运行 find 因为有 find.exe,虽然它不是 Unix find 而是一个搜索文本的工具。 lessgrep 默认情况下不可用,但如果您安装了 Cygwin、MSYS 或 Gnu32,那么它们将在路径中准备就绪。 Git on Windows 运行s on MSYS 所以不出所料你可以 运行 less, grep 或其他 Unix 工具

请注意,您需要使用 where.exe command 而不是像在 cmd.exe 上那样仅使用 where command 因为 where 在 powershell 上具有不同的含义

如果您想知道为什么可以看到它们,您可以 运行 Get-Command 命令,它会告诉您从哪里调用文件(也是查找底层 VBS 的好工具当您不时 运行 命令时调用的脚本)

例如,LS 命令在 PowerShell 中有效,但它实际上与 Bash 中使用的二进制文件不同。

_>Get-Command ls

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           ls -> Get-ChildItem

这里我们可以看到,在本例中,运行ning LS实际上是调用[=14=的Cmdlet(即原生PowerShell命令)的PowerShell别名].

如果您 运行 在其他命令上这样做,您可以确定为什么会看到它们。也许你在某个时候安装了 cygwin,或者安装了 Python / Ruby(一些安装程序包 Bash 二进制文件)。