我有一个名为grep
的自定义PowerShell 7模块,位于C:\Program Files\PowerShell\Modules\grep
。
在我的系统环境路径中,还有一个通过msys2安装的grep.exe
。
在终端调用grep
时,调用的是路径中的grep.exe
,但是我想从模块中调用grep
,怎么做呢?
PS C:\> Get-Command grep
CommandType Name Version Source
----------- ---- ------- ------
Application grep.exe 0.0.0.0 C:\msys64\usr\bin\grep.exe
PS C:\> Get-Module -ListAvailable | where Name -EQ grep
Directory: C:\Program Files\PowerShell\Modules
ModuleType Version PreRelease Name PSEdition ExportedCommands
---------- ------- ---------- ---- --------- ----------------
Script 0.0 grep Desk grep
1条答案
按热度按时间46qrfjad1#
boxdog在注解中提供了关键的指针:
$env:PATH
)[1]都优先于 * 外部程序 *(可执行文件)。grep
命令应该抢占grep.exe
。换句话说:* * 要使
grep
模块的grep
命令抢占grep.exe
,必须确保已先导入模块**。要作为单个命令的一部分隐式执行此操作,可以使用module-name * prefix * 执行以下操作:
如果您希望能够按原样使用
grep
来调用模块函数,则必须确保首先导入模块,这可以通过$PROFILE
文件以两种方式之一实现(但请注意,可以通过PowerShell CLI和-NoProfile
绕过概要文件加载):$PROFILE
文件中:$PROFILE
文件中:[1]在 * Windows * 上,除非调用 * 带有扩展名 * 的
.exe
文件,否则PowerShell会优先考虑具有给定(无扩展名)名称的.ps1
文件。在 * Unix * 类平台上,可执行文件通常 * 没有 * 文件扩展名,后者优先。