rm二进制文件在Windows$PATH中,但Powershell仍然更喜欢删除项



我在Windows上安装了GNU核心实用程序,并在Windows中将bin文件夹添加到我的用户PATH变量中。

我发现Powershell更喜欢Windows本机命令,而不是PATH中具有相同名称的命令。

例如,当运行get-command rm时,powershell通知我它已映射到内部

CommandType     Name                                               Version    Source
-----------     ----                                               -------    ------
Alias           rm -> Remove-Item

与有Windows版本的任何命令相同-findmkdir

检查我知道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-Aliasrm -Force

  • 并非所有别名都需要-Force才能删除,但许多内置别名都需要(尽管不是rm)。

相关内容

最新更新