我在Windows上安装了GNU核心实用程序,并在Windows中将bin
文件夹添加到我的用户PATH
变量中。
我发现Powershell更喜欢Windows本机命令,而不是PATH
中具有相同名称的命令。
例如,当运行get-command rm
时,powershell通知我它已映射到内部
CommandType Name Version Source
----------- ---- ------- ------
Alias rm -> Remove-Item
与有Windows版本的任何命令相同-find
、mkdir
等
检查我知道Windows没有替代品的命令可以给我正确的二进制位置
get-command md5sum
CommandType Name Version Source
----------- ---- ------- ------
Application md5sum.exe 5.3.0.1936 C:Usersalshdbincoreutilsbinmd5sum.exe
有没有一种方法可以告诉PowerShell更喜欢我在PATH中指定的版本,而不是本机Windows命令(而不手动混淆它们)?
基于Lee Dailey的有益评论:
-
PowerShell别名的优先级高于具有相同(基本)名称的外部程序。
-
注意,优先级规则意味着在没有
rm
别名的情况下,(假设的)rm
函数也将优先(甚至是cmdlet,尽管cmdlet的动名词命名约定使这种情况极不可能发生)。 -
要查看给定名称存在的所有命令形式,请将
Get-Command
与-All
开关一起使用:Get-Command rm -All
-
要绕过命名冲突,请调用文件扩展名为的外部程序,在这种情况下为
rm.exe
;使用程序的(完整)路径也可以。
-
-
虽然建议脚本和模块不要使用别名,但换言之:建议仅将别名用作交互式的便利-在实践中,会使用,因此如果删除内置的别名(如
rm
),则有破坏代码的风险。 -
如果您愿意承担此风险,请参阅以下内容了解如何删除
rm
别名;如果希望删除也适用于未来的所有PowerShell会话,请将调用添加到$PROFILE
文件中。
要删除rm
别名,请将Remove-Item
与别名提供商提供的标准Alias:
驱动器一起使用:
Remove-Item Alias:rm -Force
注:
在PowerShell(Core)6+中,您可以更简单地使用
Remove-Alias
rm -Force
。并非所有别名都需要
-Force
才能删除,但许多内置别名都需要(尽管不是rm
)。