背景
在本地写了个Bash Shell脚本,但上传到Linux端后加完权限执行时报错:
(脚本名:script.sh)
-bash: ./script.sh: /bin/bash^M: bad interpreter: No such file or directory
分析
这个错误通常是由于脚本文件的行尾符格式不正确引起的。(大概率,解决了相应可能性后成功
Windows 系统使用的行尾符是 CRLF(`\r\n`
),而在 Unix/Linux 系统上使用的是 LF(`\n`
)。
解决
① dos2unix 工具
可以使用 dos2unix 工具将脚本的行尾符转换为 Unix 格式。在终端中执行以下命令:
dos2unix script.sh
这将删除行尾的 \r
,确保脚本在 Unix/Linux 系统上正确运行。
② tr
命令 (亲测有效)
如果没有安装 dos2unix
,可以尝试使用 tr
命令:
tr -d '\r' < script.sh > script_unix.sh
chmod +x script_unix.sh
./script_unix.sh
这将创建一个新的 script_unix.sh
文件,其中行尾符已经被转换,然后给予执行权限并执行。
神奇之处在于:对比两个文件内容,完全一致(这里没想通,也不太清楚原因,如果有大神看见了这篇文章,请不吝赐教!我也会随时更正本文有出入的猜想~)