问题现象:有时候将windows系统中svn上的shell脚本上传到Linux服务器上之后执行会遇到报错-bash,没有文件或目录。
问题原因:Linux系统和Windows系统中换行符不同。此时vi文件可以发现有的行后面会有^M字符出现。
解决方法有两种:
1.vi文件并:%s/^M//g去掉所有^M字符;(也可以考虑sed -i)
2.dos2unix 文件;
推荐第二种,因为有时候需要对所有的都执行,比如find -name "*.sh" |xargs dos2unix
原理:dos2unix命令,实际上就是将windows编辑的文件中的0d0a(’\r\n’)换行符转换为linux中的0a(’\n’)。
关于dos2unix命令的详细用法,请参考http://blog.sina.com.cn/s/blog_7226f3660100uipz.html;
关于换行的事,可以参考http://blog.csdn.net/wjcquking/article/details/6634504,有一些笔误,无视吧,看第一段历史就行