-bash: ./run.sh: /bin/bash^M: bad interpreter: No such file or directory 报错解决方法

原因:shell脚本文件是dos格式,即每一行结尾以\r\n来标识,而unix格式的文件行尾则以\n来标识。

查看脚本文件是dos格式还是unix格式的几种办法。

(1)cat -A filename 从显示结果可以判断,dos格式的文件行尾为^M,unix格式的文件行尾为

(2)od -t x1 filename 如果看到输出内容中存在0d 0a的字符,那么文件是dos格式,如果只有0a,则是unix格式。

(3)vi filename打开文件,执行 : set ff,如果文件为dos格式在显示为fileformat=dos,如果是unxi则显示为fileformat=unix。

解决方法

方法一:

bash 复制代码
 [root@root bin]# dos2unix run.sh
dos2unix: converting file run.sh to UNIX format ...

方法二:

bash 复制代码
vim mysell.sh
 
:get fileformat          #查看本文件的格式
:set fileformat=unix     #设置文件为unix
:wq                      #保存

方法三:

bash 复制代码
#使用sed命令,直接替换结尾符为unix格式
 
sed -i "s/\r//" run.sh
或者 
sed -i "s/^M//" run..sh
 
相关推荐
南烟斋..15 分钟前
Linux进程管理完全指南:创建、终止、回收与替换
linux·算法
sunon_16 分钟前
解决linux系统PDF中文乱码问题
linux·运维·pdf
BJ_bafangonline20 分钟前
Xmanager怎么显示远程linux程序的图像?
linux·运维·服务器
云水木石32 分钟前
Rust 语言开发的 Linux 桌面来了
linux·运维·开发语言·后端·rust
代码游侠1 小时前
学习笔记——写时复制(Copy-on-Write)
linux·网络·笔记·学习·写时复制
被AI抢饭碗的人1 小时前
linux:线程同步与互斥
linux·开发语言
HalvmånEver1 小时前
Linux:基础IO(终)
linux·运维·c++·学习·缓冲区·libc
西柚小萌新2 小时前
【计算机常识】--Windows 安装 WSL2 并运行 Ubuntu 22.04
linux·windows·ubuntu
福尔摩斯张2 小时前
基于TCP的FTP文件传输系统设计与实现(超详细)
linux·开发语言·网络·网络协议·tcp/ip·udp
Sleepy MargulisItG2 小时前
【Linux网络编程】应用层自定义协议与序列化
linux·服务器·网络·网络协议·tcp/ip