博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
CRLF line terminators导致shell脚本报错:command not found --转载
阅读量:6200 次
发布时间:2019-06-21

本文共 1685 字,大约阅读时间需要 5 分钟。

Linux和Windows文本文件的行结束标志不同。在Linux中,文本文件用"/n"表示回车换行,而Windows用"/r/n"表示回车换行。有时候在Windows编写shell脚本时需要注意这个,否则shell脚本会报"No such file or directory"或"command not found line x"之类的错误,如果不知晓前因后果,肯定会被这个折腾得相当郁闷。如下所示test.sh

[root@DB-Server myscript]# more test.sh
. /home/oracle/.bash_profile
echo ' '
date
echo ' '
 
sqlplus test/test @/home/oracle/scripts/test.sql
 
echo ' '
date
echo ' '

执行test.sh脚本过程中报" No such file or directory /home/oracle/.bash_profile" 和"command not found line xx". 如果你从shell脚本语法方面去检查,根本没有任何问题。不知具体原因的肯定相当郁闷。

[oracle@DB-Server myscript]$ ./test.sh
 
: No such file or directory /home/oracle/.bash_profile
 
: command not found line 2:
 
: command not found line 4: date
 
: command not found line 6:
 
: command not found line 7:

如果你用file命令查看test.sh,你会发现文件编码为ASCII,with CRLF line terminators。我们用cat -v test.sh 可以看到^M (\r的十六进制为0D,对应的控制符为^M)。 cat -v可以看到文件中的非打印字符。

[root@DB-Server myscript]#
[root@DB-Server myscript]# file test.sh
test.sh: ASCII text, with CRLF line terminators
[root@DB-Server myscript]# cat -v test.sh
. /home/oracle/.bash_profile^M
echo ' '^M
date^M
echo ' '^M
^M
sqlplus test/test @/home/oracle/scripts/test.sql^M
^M
echo ' '^M
date^M
echo ' '^M
[root@DB-Server myscript]#

vi命令查看test.sh文件看不到^M, 其实这个跟vi的版本有关系。有些版本vi显示的是行尾为^M(AIX下都是显示^M)。而有些vi打开时可以看到底下有[dos]的格式提示。

我们可以用file命令对比正常的shell脚本的格式和编码。如下所示

[oracle@DB-Server myscript]$ file myshell.sh
 
myshell.sh: Bourne-Again shell script text executable

解决这个问题其实也不难,有很多方式,例如直接使用vi编辑器编写shell脚本;使用cat命令创建shell脚本,然后从Windows文本工具里面拷贝脚本过来;最方便的还是使用dos2unix将DOS格式文本文件转换成Unix格式或Linux格式。

 

作者:
出处:
如果你真心觉得文章写得不错,而且对你有所帮助,那就不妨小小打赏一下吧,如果囊中羞涩,不妨帮忙“推荐"一下,您的“推荐”和”打赏“将是我最大的写作动力!
本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
你可能感兴趣的文章
HTML5元素
查看>>
模仿spring authentication-provider 自己写登录人管理
查看>>
[转载]持续交付和DevOps的前世今生
查看>>
初始编码
查看>>
File 需要的空间
查看>>
数据连接 DataDirectory 中的作用
查看>>
Struts2
查看>>
算术运算符和三元运算符
查看>>
七种引起偏头痛的常见食物
查看>>
利用VS2005调节dump文件
查看>>
BZOJ 1430 小猴打架
查看>>
2018.12.4 队测总结+题解
查看>>
【Linux】Centos7安装之后,双系统的情况下,怎么能在CentOS7下访问Windows的磁盘...
查看>>
Java中的数值和集合
查看>>
Code4 APP
查看>>
@synchronized(self)
查看>>
linux——攻防技术介绍|主动攻击|被动攻击
查看>>
线段树复合标记
查看>>
thinkphp使用模块/控制器/操作访问时出现No input file specified.解决方式
查看>>
软件工程概论第一章概括
查看>>