首页 > 系统相关 >Linux fileformat error: bad interpreter: No such file or directory

Linux fileformat error: bad interpreter: No such file or directory

时间:2024-07-13 09:18:35浏览次数:15  
标签:文件 No 格式 sh Linux such dos2unix 换行符 fileformat

背景

在windows下新建的sh文件,copy到linux下有的会报错,一般是格式问题
默认情况下windows格式会在段落末尾有CR、LF,但是Unix格式只有LF

示例

执行sh脚本文件

./file.sh
-bash: ./file.sh: /bin/sh^M: 坏的解释器: 没有那个文件或目录
或者
报bad interpreter:No such file or directory错误

 

分析

起初只看到后面这部分,以为目录下面真的没有这个问题,但是通过 ls -al 查看是可以看到文件的,后面又以为是文件权限问题,查了下也不是,最后才留意到前面的 ^M

这个错误通常是由于 shell 脚本的换行符格式问题导致的。在 Windows 系统下编辑的文件可能会出现这种问题。^M 表示回车符,/bin/sh^M 这个错误提示表明脚本中包含了 Windows 格式的回车符。

 

方案

可以使用 dos2unix 命令将脚本文件转换为 Unix 格式的换行符。
对于 Debian/Ubuntu 系统,可以使用 apt 包管理工具进行安装:

sudo apt update
sudo apt install dos2unix
dos2unix yourfile

 

对于 Red Hat/CentOS 系统,可以使用 yum 包管理工具进行安装:

sudo yum install dos2unix
dos2unix yourfile

 

对于 Fedora 系统,可以使用 dnf 包管理工具进行安装:

sudo dnf install dos2unix
dos2unix yourfile

 

Alpine Linux系统,可以使用 apk 包管理工具进行安装:

apk update
apk add dos2unix
dos2unix yourfile

 


如果系统中没有安装 dos2unix,也可以手动转换文件格式:

# 使用 vi 编辑器转换格式
vi exts/jsonpath.sh
:set fileformat=unix
:set ff
:wq

上述操作将会使用 vi 编辑器将文件格式转换为 Unix 格式,然后再次尝试执行脚本文件,应该就不会出现类似的报错了。


可以在文件中增加 set fileformat=unix 这段代码来告诉 vi 编辑器将文件格式转换为 Unix 格式。这样做的效果和通过命令行设置是一样的。这个方法可以确保在编辑保存文件时就已经转换了格式,方便快捷。
也可以把这个set命令写在sh文件里面

set ff=unix
或
set fileformat=unix

可以在使用 vi 编辑器打开文件后,在编辑模式下输入 :set fileformat=unix 命令,然后保存退出即可。这样就会将文件的换行符格式转换为 Unix 格式,从而避免类似的报错。

 

扩展

fileformat 这个变量都有哪些值

在 vi/vim 编辑器中,fileformat 变量用于指定文件的换行符格式,它可以有以下几种值:

unix:Unix 格式的换行符(LF,Line Feed)
dos:Windows 格式的换行符(CRLF,Carriage Return + Line Feed)
mac:旧版 Mac 格式的换行符(CR,Carriage Return)

可以根据需要设置文件的换行符格式,以便与当前环境和其他工具相兼容。通过设置正确的 fileformat 值,可以避免类似于换行符格式错误导致的问题。

 

标签:文件,No,格式,sh,Linux,such,dos2unix,换行符,fileformat
From: https://www.cnblogs.com/lyc94620/p/18299687

相关文章

  • 20240712NOIP模拟赛复盘
    20240712NOIP模拟赛复盘总结T1:其实不难,但是认为自己推出来依旧很难。但是暴力分\(15\)pts应该是好拿的。T2:推了一个正解,但是因为一些细节问题写挂了。以后应该先把暴力分全部拿完再写正解,写代码时也需要注意细节。T3:赛时口胡出了正解,但是边界没有考虑完全,导致样例没过,最后......
  • 【Linux】构建项目
    cmake--build<dir>[<options>][--<build-tool-options>]cmake--build--preset<preset>[<options>][--<build-tool-options>]命令选项1、--build<dir>构建项目,这个选项是必须的(除非指定preset)而且必须是第一个。2、--preset<p......
  • Linux权限理解
    Linux用户的概念Linux下有两种用户:超级用户(root)、普通用户。超级用户:可以再linux系统下做任何事情,不受限制普通用户:在linux下做有限的事情。超级用户的命令提示符是“#”,普通用户的命令提示符是“$”。角色切换普通用户切换到超级用户[yuan@VM_0_12_centos......
  • 【香菇带你学Linux】Linux系统中磁盘管理LVM与挂载
    Linux系统中磁盘管理LVM与挂载本文以属于Linux系统基本概念,如果以查找教程教程,解决问题为主,只需要查看本文后半部分。如需要系统性学习请查看本文前半部分。本文操作极容易导致主机无法自动重启,请慎重操作。操作前务必要进行备份操作!文章目录Linux系统中磁盘管理LVM与......
  • 应急响应命令(Linux)
    netstat-anultp查看进程(用来判断开启了哪些服务等)ls-al查看目录下所有文件,包括隐藏文件ls-alt查看目录下所有文件,包括隐藏文件,按时间顺序排序cataccess.log|wc-l查看文件的行数wc-l是查看文件行数的意思cat-eaccess.log|grep1.php查找a......
  • Linux入门---(一)
    VIM编辑器1.一般模式:2.编辑模式3.命令模式:%s/old/new/g替换当前匹配到的所有old为new小tips:......
  • CF1114F Please, another Queries on Array?
    一道很好的线段树+求欧拉函数题!!!先简单理解一下题意:给你一段长度为n的区间,q次操作,输入为1时将l~r区间每个数乘上x,输入为2时求解\(\varphi(\prod_{i=l}^{r}{a_i})\)。赛时心历经过:第一眼感觉是个线段树板子题,赛时也是这么想的,打到一半发现不对劲,首先这个乘积就没法维护,随便乘......
  • NOIP GRAPH
    NOIPGRAPH1.可持久化并查集直接用可持久化线段树维护可持久化数组2.基环树一种出题人经常拿来强行增大题目难度的工具。可以通过断边或者分讨的方式处理。3.2-SAT2-SAT使用拆点表示bool取值,用有向边代表变量之间推导的关系。图中强连通分量就代表了一套等于关系,里......
  • NOIP DP
    NOIPDP本章选用题目重做的方法进行复习会选择有价值的题目重做1.数位DPP2602数字计数Trick典型转换:前缀和转换通过从高到第枚举数字的方法进行统计。这是很常见的限制数字范围的方法。P4127同态分布所以数位DP开始推导的时候通常是从暴力开始的,开始的时候就是枚举......
  • noip ds
    Summaryscoi/noipds1.吉司机线段树平常我们的线段树处理问题的时候,其实已经有体现这样的思想:如果当前区间是全部都被影响的,那么打上tag返回,如果是全都没有被影响的,那么直接返回,如果是一部分被影响的,直接暴力向下递归直到前两个条件满足。但是这种处理方式适用于影响的数一定......