[英]rm binary in Windows $PATH but Powershell still prefers Remove-Item
我在 Windows 上安装了 GNU 核心实用程序,并将bin
文件夹添加到我在 Windows 中的用户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:\Users\alshd\bin\coreutils\bin\md5sum.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
,特别是)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.