WSL2使用here doc时报错No such file or directory,是缺包还是Bug?
WSL2使用here doc触发
cat: -: No such file or directory问题说明 这个问题既不是缺少系统软件包导致的,也不属于WSL的原生Bug,核心原因是WSL默认继承Windows系统PATH,调用了Windows环境下的cat工具,而非WSL发行版自带的GNU cat,二者对here doc语法的支持存在兼容问题。
问题根因
- WSL2默认会把Windows系统的PATH追加到Linux的PATH变量末尾,如果你安装过带cat工具的Windows软件(比如Git for Windows、Cygwin、MinGW等),且这些软件的路径在PATH中的优先级高于Linux的
/usr/bin路径,就会优先调用Windows版本的cat。 - Windows版本的cat不支持Linux原生的here doc语法,解析输入时会把标准输入识别为
-参数但无法匹配到对应文件,最终抛出你遇到的报错。
验证方法
执行which cat查看当前调用的cat路径:
- 如果输出为
/usr/bin/cat,调用的是Linux原生cat,不会出现该问题 - 如果输出为
/mnt/c/开头的路径,说明调用的是Windows下的cat,就是问题的根源
解决方法
临时修复
直接指定调用Linux原生cat即可,命令如下:
/usr/bin/cat <<EOF abc abc abc EOF
永久修复
- 编辑WSL系统配置文件
/etc/wsl.conf,添加以下内容:
[interop] appendWindowsPath = false
- 保存文件后,在Windows终端执行
wsl --shutdown重启WSL实例,配置就会生效。 - 重启后再次执行
which cat,确认输出为/usr/bin/cat即可。
内容的提问来源于stack exchange,提问作者Arun Agarwal
相关产品推荐
相关产品推荐

