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


測試了一下基本可以用,由於本人能力也有限,不足之處歡迎指正。

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