WSL Ubuntu环境下终端可执行命令但文本文件执行失败问题求助
解决WSL中执行编译脚本的错误问题
Hey there! Let's figure out why your script is throwing those errors and get it working smoothly. Here's what's going wrong and how to fix it:
核心错误原因
1. Windows与Linux的换行符不兼容
Windows用的是CRLF(\r\n)作为换行符,而Linux只用LF(\n)。当你在Windows里编辑Compile.txt然后拿到WSL里运行时,每个命令末尾都会多一个隐藏的\r字符:
- 比如
cd python变成了cd python\r,系统找不到名为python\r的目录(这就是你看到cd: $'python\r': No such file or directory的原因) - 这个
\r还干扰了make命令,导致它识别错误的目标,出现No rule to make target 'clean gcc -o .o'这类混乱的错误
2. 你的文件不是可执行的shell脚本
直接用./Compile.txt运行时,Linux不知道这是一个要执行的脚本:
- 它没有可执行权限
- 没有明确告诉系统用什么程序来解释它(比如bash)
.txt后缀也会让系统默认把它当成普通文本文件,而不是可执行脚本
分步解决方案
1. 修复换行符问题
先把文件里的Windows换行符转换成Linux格式:
- 安装转换工具(如果没装的话):
sudo apt update && sudo apt install dos2unix - 转换你的文件:
如果你不想装工具,也可以用sed命令直接替换掉dos2unix Compile.txt\r:sed -i 's/\r$//' Compile.txt
2. 把文件改成标准的shell脚本
- 先重命名文件,用
.sh后缀更清晰:mv Compile.txt compile.sh - 编辑脚本,在第一行加上
shebang(告诉系统用bash执行脚本):
把内容改成:nano compile.sh
按#!/bin/bash make clean make cd python python setup.py install --userCtrl+O保存,Ctrl+X退出nano。
3. 给脚本添加执行权限
运行这个命令让脚本变成可执行的:
chmod +x compile.sh
4. 运行脚本
现在你就可以直接执行脚本了:
./compile.sh
临时替代方案(如果不想改脚本)
如果你暂时不想修改文件,也可以直接用bash来解释执行你的文本文件:
bash Compile.txt
不过还是推荐上面的标准脚本方式,更规范也不容易出错。
内容的提问来源于stack exchange,提问作者James A




