来自 MSYS2 的 grep 无法从 PowerShell Core 函数运行

grep from MSYS2 not runnable from PowerShell Core function

我正在尝试设置 grep 与 Git Bash 一起安装,以便 Windows 可以从 PowerShell Core 获得。

如果我的 Microsoft.PowerShell_profile.ps1 中有以下内容:

Set-alias grep "C:\Program Files\Git\usr\bin\grep.exe"

有效 - 我可以将它与管道一起使用:

❯ echo abc | grep a
abc

但我缺少 --color=auto 选项,通常在 Linux 上配置 .bashrc

使用 some research,我发现 PowerShell 不支持带参数的别名。解决方法是写一个函数。

所以我做到了:

Set-alias _grep "C:\Program Files\Git\usr\bin\grep.exe"
function grep {_grep --color=auto $args}

但是没用。以这种方式配置的函数不会 return 任何输出并冻结 shell.

如果我手动提供 --color=auto 给管道中使用的 grep,它工作正常(输出是 returned 并且 a 被突出显示):

❯ echo abc | _grep --color=auto a
abc

ls --color=auto 在我上面提供的 link 中的函数中使用也可以正常工作,所以我猜问题出在我的函数中,它与管道不兼容。

不幸的是,我不太了解 PowerShell,有什么想法吗?

您需要将管道输入重定向到您正在包装的命令。

最直接的方法是通过 $input automatic variable:

function grep { $input | _grep --color=auto @args }