Shell脚本报错 /bin/bash^M: bad interpreter

2019年9月17日 Jerry 4452 2019年9月17日

       之前写了一个shell脚本执行都是没有问题的,后来换了一台服务器,结果执行失败,提示:-bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory  这是怎么回事?

       代码很简单,就是生成一个随机码,输出。

#!/bin/bash

echo "正在生成随机验证码.."
# 生成随机码
newpsd=$(date +%s%N | md5sum | head -c 10)
echo "生成成功:" $newpsd

       执行一直提示如下的错误,即使加了777的权限还是不好使。

       最后,网上找到了答案:这个文件在 windows 里使用 nodepad++ 编辑保存过,于是文件格式变为dos格式,而linux系统执行的是unix格式的文件。关于 dos/windows 和 unix/linux 的文件格式区别,貌似只存在于回车换行上:dos 文件中,按一下回车键相当于输入了 \r\n,而在unix的文件格式中是\n。

       可以在 vim 编辑器中查看格式,命令为 :set ff ,于是可以看到格式:

       原因找到了,那就将 dos 格式转变为 unix 格式即可,以下几种转换方法:

1、vim编辑器中修改

       vim编辑器打开文件后,直接输入 :set ff=unix,回车保存即可:

2、借用 dos2unix 和 unix2dos 命令转换

       如果没有安装需要安装这俩工具:

sudo apt install dos2unix
sudo apt install unix2dos

       执行命令转化:

ubuntu@VM-0-9-ubuntu:~$ dos2unix test.sh 
dos2unix: converting file test.sh to Unix format ...

       最后,就可以愉快的执行脚本了!


原创文章,转载请注明出处: https://jerrycoding.com/article/dos2unix

微信
jerry微信赞助
支付宝
jerry支付宝赞助

您尚未登录,暂时无法评论。请先 登录 或者 注册

0 人参与 | 0 条评论