Win10 MINGW64 Bash下文件创建与复制异常:是Bug还是特性?如何禁用?
问题描述
在Windows 10的MINGW64 Bash环境下,当目录里有hello.exe可执行文件时,会出现以下现象:
- 执行
ls能看到绿色的hello.exe*(星号表示文件可执行) - 特意用
ls hello查询时,结果显示为hello*,自动省略了.exe扩展名 - 尝试创建无扩展名的
hello文件时,直接报错权限拒绝:
$ echo hello > hello bash: hello: Permission denied
- 递归复制包含
hello/文件夹和hello.exe的目录时,如果先复制hello.exe再复制hello/,会提示无法覆盖:
cp: cannot overwrite non-directory './hello' with directory './hello'
请问这是Bug还是特性?如果是特性,怎么禁用?
解答
这是MINGW64的特性,专门为兼容Windows用户不用输入.exe扩展名就能运行程序的习惯设计,核心是两个机制:
- Shell查找可执行命令时,会自动补全
.exe后缀,所以输入hello实际运行的是hello.exe ls这类工具被修改过,会把.exe文件显示成无扩展名的“虚拟别名”,让操作逻辑更贴近Windows平台
禁用方法
可以通过设置环境变量关闭这些兼容特性:
- 临时生效:在当前Shell会话中直接执行
export MSYS2_ARG_CONV_EXCL="*" export EXEC_SUFFIXES=()
- 永久生效:编辑
~/.bashrc文件,将上述两行命令添加进去,保存后重启Shell即可
如果只是需要查看真实文件名,无需全局禁用特性,给ls添加参数就能显示原始文件名:
ls --literal
内容的提问来源于stack exchange,提问作者AbbeD
相关产品推荐
相关产品推荐

