1.异常发生背景:
在win10系统上用Git桌面版clone下来的ROS程序包代码拷贝到Liunx系统下。执行catkin build命令出现异常信息'/usr/bin/env python\r no such file or directory'。
2.异常原因分析:
在百度了该异常代码后发现是DOS系统下和Linux系统下对于换行键的表示不同。
在windows下,用连续的'\r'和'\n'两个字符进行换行。'\r'为回车符,'\n'为换行符。
如果win下的文档上传到linux,每行的结尾都会出现一个M,(M是ctrl+v,ctrl+m)
如果是单个文档的话,可以用vi打开,删除行尾的^M
#!/usr/bin/env python\r\n
在Linux下,用'\n'进行换行。
#!/usr/bin/env python\n
所以windows下的程序会认为#!/usr/bin/env python是一行,而linux会认为#!/usr/bin/env python\r是一行。
3.异常解决
看了很多网上的教程,说用VIM编辑器进行修改
vi 此文件
输入:set ff=unix
再输入:wq 保存
运行成功。
但如里批量去除的话就不能用vi了,
方法1:用dos2unix工具,首先通过apt-get命令安装dos2unix的包,然后通过dos2unix这个命令即可完成转换。
sudo apt-get install dos2unixdos2unix <filename>
把当前文件夹下所有win文档转换成linux下文档命令:
find ./ -type f -print0 | xargs -0 dos2unix
如果想把linux下的文档转换成win下的:
find ./ -type f -print0 | xargs -0 unix2dos
方法2:用sed命令把win文档转换成linux下文档:
find ./ -type f print0 | xargs -0 sed -i ‘s/^M//′
把linux下的文档转换成win下的
fild./−typefprint0∣xargs−0sed−i′s//^M /′
这篇文章还提供了其他dos2unix命令的相关参数和批量递归修改的方法。
https://blog.csdn.net/leedaning/article/details/53024290
至此解决异常,为了以后不再出现这个问题,记录解决过程以加深印象。