-bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录
- 终端报错:
-bash: ./uninstall.command: /bin/sh^M: 坏的解释器: 没有那个文件或目录
- 原因:由于文件行尾符不匹配导致的。当脚本文件在Windows环境中创建或编辑后,行尾符为CRLF(即回车和换行,
\r\n
),而在Unix/Linux系统中,行尾符只使用LF(换行,\n
)。^M
字符是Windows风格的回车符在Unix/Linux中的显示方式
可以使用以下几种方法之一来转换文件的行尾符:
1、方法一:使用 dos2unix
工具
dos2unix 是一个专门用于将文本文件从DOS/Windows格式转换为Unix格式的工具。
- 安装
dos2unix
:在Debian/Ubuntu系统上,可以通过以下命令安装:
sudo apt-get install dos2unix
- 在RedHat/CentOS系统上,可以使用:
sudo yum install dos2unix
- macOS用户,可以使用Homebrew安装:
brew install dos2unix
- 转换文件:安装完成后,使用以下命令转换您的脚本文件:
dos2unix xxx
2、方法二:使用 sed 命令
如果不想安装额外的软件,可以直接使用sed命令来移除多余的回车符:
sed -i 's/\r$//' xxx
- 这里的 -i 选项表示直接在文件中进行替换,
s/\r$//
表示查找每一行结尾的\r
并删除它。
3、方法三:使用 tr
或 perl
,可以使用tr或者perl来完成相同的操作:
- 使用
tr
:
tr -d '\r' < ./uninstall.command > temp && mv temp xxx
- 使用
perl
:
perl -pi -e 's/\r\n|\n/\r\n/g' xxx
4、方法四:使用文本编辑器
- 也可以通过支持行尾符转换的文本编辑器(如VS Code、Sublime Text、Notepad++等)打开文件并手动转换行尾符格式。