shell脚本出现莫名其妙的错误!可能是win中的^M 符号导致

删除win中的^M 符号


注:后来了解到实际网络上已经有成熟的软件dos2unix,如果联网了的话,可以用yum进行安装,yum search dos2unix,我的是centos6.5 64位,直接安装yum install dos2unix.x86_64,我自己还没验证过。



下面的方法就多次一举了!


这个符号是win下的回车换行符,在linux下没有,显示为^M,如果不处理会造成linux读取异常,尤其是是在win下编辑的脚本或者makefile等文件。
网上也有几个删除^M的方法,综合对比选择了一种


sed -i 's/^M/"\n"/g' filename 注意:^M需要这样输入 ctrl+v+m


最好用vim打开,然后启动命令:set ff=unix,将文档设置为unix格式


如果可以的话,建议将此命令写成脚本命令,放在/usr/bin目录下作为常用命令,具体实现如下

wtu.sh

!/bin/bash -
# change file from win to linux, some file edit on win will contain ^M,maybe cause linux error


 src_file=$1
[ -z $src_file ] && echo "input error file name" && exit 1 
sed -i 's/^^M$//g' $src_file  #留意 ^和$是锚定开头和结尾的意思,即遇到单独一行只有^M的,直接删除不换行
sed -i 's/^M$//g' $src_file
while [[ 1 ]]
do
  grep -q ^M $src_file
  [ $? -eq 1 ] && break 
  sed -i 's/^M/\n/g' $src_file
done
echo ":set ff=unix
      :wq"|vim $src_file &> /dev/null


#cp wtu.sh /usr/bin/dostounix

#chmod    +x /usr/bin/dostounix


测试了一下基本可以用,由于本人能力也有限,不足之处欢迎指正。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章