WSL创建目录时出现不可打印字符致cd命令失败求助
问题原因:Windows换行格式引发的不可打印字符问题
这是因为你的脚本使用了Windows的**CRLF(\r\n)换行格式,而WSL中的bash只识别Linux/Unix的LF(\n)**换行符。
当bash执行脚本时,会把每行末尾的\r(回车符,不可打印)当成命令内容的一部分。比如export TOP_FOLDER=pwd``这行,执行后pwd的输出路径后面会被带上\r,后续变量引用过程中还可能让这个\r累积成多个,最终cd命令试图访问的路径变成了/mnt/e/myfolder\r\r\r——这个路径实际不存在,自然报错。
解决办法
- 转换现有脚本的换行格式:用WSL里的
dos2unix工具处理脚本,执行:
如果没装dos2unix test.shdos2unix,先执行sudo apt install dos2unix完成安装。 - 后续编写脚本时,把编辑器的换行格式设为LF:比如VS Code右下角可以直接切换,Notepad++里选「编辑」→「文档格式转换」→「转换为UNIX格式」。
- 临时修复:不想转格式的话,在变量赋值时手动去掉回车符,把
export TOP_FOLDER=pwd``改成:export TOP_FOLDER=$(pwd | tr -d '\r')
内容的提问来源于stack exchange,提问作者Ray H
相关产品推荐
相关产品推荐

