admin管理员组文章数量:1613747
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]的格式提示。
[oracle@DB-Server myscript]$ file myshell.sh
myshell.sh: Bourne-Again shell script text executable
解决这个问题其实也不难,有很多方式,例如直接使用vi编辑器编写shell脚本;使用cat命令创建shell脚本,然后从Windows文本工具里面拷贝脚本过来;最方便的还是使用dos2unix将DOS格式文本文件转换成Unix格式或Linux格式。
本文标签: 差异文件LINECRLFterminators
版权声明:本文标题:with CRLF line terminators(Linux和Windows文件的差异) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728657982a1168381.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论