【Linux学习】解决Linux环境下执行脚本时报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录

一、问题描述

我在Windows 10 系统下编辑了一个发送消息到企业微信的shell脚本文件,然后copy到了远程的Linux服务器,当运行的时候报错了。如下所示:
在这里插入图片描述

root@ubuntu116:/data/gitlabData/auto_back_shell# ./qiyewechat-notifier.sh 
-bash: ./qiyewechat-notifier.sh: /bin/bash^M: 坏的解释器: 没有那个文件或目录
root@ubuntu116:/data/gitlabData/auto_back_shell# 

二、错误原因

这个文件在Windows 下编辑过,在Windows下每一行结尾是\n\r,而Linux下则是\n,所以才会有 多出来的\r。

三、修改错误

使用指令sed -i 's/\r$//' xxxxxxx.sh,上面的指令会把 xxxxxxx.sh 中的\r 替换成空白!
实操一下:
在这里插入图片描述

root@ubuntu116:/data/gitlabData/auto_back_shell# sed -i 's/\r$//' qiyewechat-notifier.sh 
您在 /var/mail/root 中有新邮件
root@ubuntu116:/data/gitlabData/auto_back_shell# ./qiyewechat-notifier.sh -h 
./qiyewechat-notifier.sh: 非法选项 -- h
Usage:
  qiyewechat.sh [-u USER] [-t TITLE] [-c CONTENT] [-d DETAIL] [-p PICTURE]
Description:
    USER, 用户.
    TITLE, 标题.
    CONTENT, 内容.
    DETAIL, 细节.
    PICTURE, 图片.
root@ubuntu116:/data/gitlabData/auto_back_shell# 

如上所示,执行了下面的脚本之后,

sed -i 's/\r$//' qiyewechat-notifier.sh

qiyewechat-notifier.sh就可以正常运行了!

四、附录

qiyewechat-notifier.sh的部分代码如下所示:

在这里插入图片描述

#!/bin/bash

#用法提示
usage() {
    echo "Usage:"
    echo "  qiyewechat.sh [-u USER] [-t TITLE] [-c CONTENT] [-d DETAIL] [-p PICTURE]"
    echo "Description:"
    echo "    USER, 用户."
    echo "    TITLE, 标题."
    echo "    CONTENT, 内容."
    echo "    DETAIL, 细节."
    echo "    PICTURE, 图片."
    exit -1
}


# 获取脚本执行时的选项
while getopts u:t:c:d:p: option
do
   case "${option}"  in
                u) USER=${OPTARG};;
                t) TITLE=${OPTARG};;
                c) CONTENT=${OPTARG};;
                d) DETAIL=${OPTARG};;
                p) PICTURE=${OPTARG};;
                h) usage;;
                ?) usage;;
   esac
   echo $option
   echo $OPTARG

done


作者:欧阳鹏 欢迎转载,与人分享是进步的源泉!
转载请保留原文地址:https://blog.csdn.net/qq446282412/article/details/86488451
☞ 本人QQ: 3024665621
☞ QQ交流群: 123133153
☞ github.com/ouyangpeng
☞ oypcz@foxmail.com


  • 47
    点赞
  • 109
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 12
    评论
### 回答1: 当出现类似的错误消息“shell脚本bash: ./t.sh: /bin/bash^M: 损解释器: 没有那个文件目录。”,通常是由于脚本文件的格式问题导致的。 该错误消息中的^M表示回车换行符(Carriage Return Line Feed,即 \r\n),同也被称为DOS格式的换行符。这种格式在Windows操作系统中被使用。然而,在Linux和Unix系统中,使用的是不同的换行符(只有一个换行符 \n)。 要解决这个问题,可以采取以下步骤: 1. 运行dos2unix命令(如果尚未安装,可以使用sudo apt-get install dos2unix命令进行安装)将脚本文件的格式转换为Unix格式。可以使用以下命令: ``` dos2unix t.sh ``` 2. 通过给脚本文件附加执行权限(使用chmod +x t.sh命令)确保脚本文件可以被执行。 3. 确保脚本文件中的第一行指定正确的解释器路径。通常,正确的解释器路径是/bin/bash。可以检查t.sh脚本文件的第一行是否为“#!/bin/bash”并确保没有其他无效字符或空格。 4. 如果解释器路径是正确的,并且脚本文件已经转换为Unix格式,并且具有执行权限,但问题仍然存在,则可能是由于解释器路径错误或不存在引起的。可以通过使用正确的解释器路径来解决此问题。 总结起来,要解决类似错误消息“shell脚本bash: ./t.sh: /bin/bash^M: 损解释器: 没有那个文件目录。”,需要将脚本文件的格式转换为Unix格式,并确保正确的解释器路径,同脚本文件赋予执行权限。 ### 回答2: 这个错误信息表示当前脚本解释器路径不正确或者不存在。这可能是由于以下几个原因造成的: 1. 脚本中指定的解释器路径错误:通常在脚本的第一行使用shebang来指定解释器路径,例如#!/bin/bash。在这个例子中,/bin/bashbash解释器的默认安装路径。如果指定的路径错误或者与实际路径不匹配,就会出现这个错误。解决方法是根据系统上的实际解释器路径进行修正。 2. 解释器不存在或已损脚本中指定的解释器路径可能对应的解释器已经被移动、删除或者损。在这种情况下,需要重新安装或修复解释器解决问题。如果是bash解释器,可以尝试重新安装bash软件包。 3. 脚本文件本身损:如果脚本文件本身受损或被修改,可能会导致解释器无法正确识别脚本内容。可以尝试使用备份文件或重新下载脚本文件解决问题。 总结来说,这个错误是由于解释器路径错误、解释器不存在或损脚本文件本身损等原因导致的。通过检查解释器路径、修复解释器或重新下载脚本文件解决问题即可。 ### 回答3: 这个错误通常表示在运行shell脚本找不到对应的解释器/bin/bash。出现这种情况可能有以下几个原因: 1. 解释器路径错误:第一行#!/bin/bash指定了脚本运行使用的解释器路径,在这个错误中提示/bin/bash^m,尾部的^m字符是不可见的carriage return符号,可能是在Windows系统上编辑脚本导致的。可以使用dos2unix命令去除这个符号,或者手动编辑脚本。 2. 解释器路径不存在:/bin/bash是默认的bash解释器路径,但是在某些系统上可能会不同,例如/bin/sh或/usr/bin/bash。可以通过which bash命令来确定bash解释器的路径,并将脚本中的路径进行相应修改。 3. 缺少解释器:如果系统中未安装bash,可能会导致找不到解释器的错误。可以通过apt-get、yum等包管理工具来安装bash,或者使用其他可用的解释器。 总结来说,解决这个问题的方法有:修改脚本中的解释器路径,删除不可见符号,安装bash或使用其他可用解释器
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

字节卷动

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值