在从Windows下移植某脚本文件到Linux环境之后会出现无法编译的情况,遇到类似如下的错误提示:
/bin/sh^M: 坏的解释器: 没有那个文件或目录(bad interpreter: No such file or directory)
如:
那么这是因为什么导致,又如何解决呢?
1、原因
这个是因为Windows下和Linux的换行符不同导致:
Windows中默认的换行符是\r\n;
Linux下的换行符是\n。
因此当文件在Windows下编辑之后就会携带\r\n的换行符导致在Linux环境下无法编译,那么如何查看和解决呢?
2、查看
可以是用vi查看文件属性来判断,也可以使用cat命令来直接查看特殊字符。
2.1、使用vi查看
在vi下可以通过使用set ff活着全称set fileformat查看文件格式来确认,如果显示为dos,那么基本就含有windows下的换行符了:
2.2、 cat命令查看隐藏字符:
下来看一下cat命令可以使用的参数:
通过帮助文档可以看到-v参数可以用来显示默认不显示的参数,那么其实只要使用cat -v就可以查看了:
然后就是使用-vET这样的参数组合来查看,但是最好用的依然是-A参数,首先不用记忆太多的参数,然后就是show-all比较齐全:
3、修改
修改可以通过vi修改文件格式达到目的,也可以使用sed命令进行直接修改:
3.1、vi模式下的修改办法
vi下的可以在ex转义方式中直接使用set ff=unix修改文件格式来进行全文修改,然后wq保存退出即可。
如果Linux下安装了dos2unix的命令,可以直接使用此命令来修改文件格式,效果同上。
3.2、使用sed命令
使用sed命令来直接替换换行符:
显然sed命令更直接和方便,而且在shell编程中也更加实用:
比如遇到字符串中使用了\r\n的换行符,导致字符串无法正确调用,就可以使用echo stringsed 's/\r//g'这样的组合来修改字符串中的特殊换行符。
以上。
欢迎关注公众号:
领取专属 10元无门槛券
私享最新 技术干货