来自 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 }
我正在尝试设置 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 }