windows - Windows $PATH 中的 rm 二进制文件,但 Powershell 仍然更喜欢 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
,特别是)。
推荐阅读
- google-cloud-platform - 您可以在文件夹/前缀级别为 Google Cloud Storage 存储分区设置生命周期政策吗?
- python - 如何在 GoogleScraper 中使用时间过滤器进行查询?
- javascript - 如何正确地将 PapaParse 添加到我的 Electron 项目中?
- android - 当 Flutter 视图嵌入到 Android 应用中时,如何在发布模式下构建?
- vue.js - Vuetify 分页如何在 rowsPerPage 属性更改时更改页面属性
- sql - 动态 SQL WHILE 在管理工作室的结果窗格中导致许多 windows
- sas - SAS 宏循环直到 obs 计数 >0
- oracle - 添加信息时 SIT 出现错误 (Oracle eBS 11i)
- python - Python 3.6 Pandas - 左对齐数据框中的数据
- python - PyCharm 聚焦 Python 控制台,用于在运行时进行输入