Rexdf

The devil is in the Details.

Linux的^M符号错误

| Comments

自己写了一份sh脚本扔到服务器上面准备后台执行,用的nohup结果错误如下:

[rexdf-pc rexdf]\> $HOME"misc/install.sh" > $HOME"install.log" & tail -f $HOME"install.log"
[1] 321655
bash: /home/rexdf/misc/install.sh: /bin/bash^M: bad interpreter: No such file or directory

起初一直不明白这个错误的意思是什么,好半天才明白 ^M是因为Win的换行引起的。可是我是用sublime建立文件啊!于是UltraStudio打开,果然没有提示dos格式转换。 说起来,百度搜索还是有比谷歌好的地方的。谷歌基本没法识别符号(在做函数搜索画图的时候除外),或者说搜索索引没有对任何符号建立过。虽然谷歌的语义搜索确实比百度强很多,只要谷歌搜索的有结果的,基本都是相关的,百度某些技术词汇基本没有相关的内容被索引。但是搜索^M这个就没有了,另外比如${}这个也是没有的。但是百度就有,而且很多。 这里解决方案很多, 0)dos2unix

$ dos2unix misc/*
dos2unix: Skipping misc/action_hooks, not a regular file.
dos2unix: converting file misc/build_nginx to Unix format ...
dos2unix: converting file misc/build_node to Unix format ...
dos2unix: converting file misc/build_php to Unix format ...
dos2unix: converting file misc/build_php_libs to Unix format ...
dos2unix: converting file misc/make.sh to Unix format ...
dos2unix: Skipping misc/tmpl, not a regular file.

1)使用工具 cat 和 tr 方法如下:

bash$ cat -v startqftest.sh |tr -d "^M" > qf.sh

其中 startqftest.sh 是存在问题的脚本, qf.sh是新生成的文件。

sed 's/^M//' test.sh > back.sh^M是Ctrl+v Ctrl+m

解释一下, cat 可以查看许多不可见这符, cat -t 显示TAB 为 ^I cat -e 显示行尾为 $, cat -v 显示不可见字符,用^M表示,所以^M 2)直接tr

tr -d "\015"<oldfilename> newfilename

3)vim a)若你的vim版本大于7.1,并想用dos显示和保存,如下语句:

:e ++ff=dos

b)若你的vim版本小于等于7.1,又想把文章按照dos格式显示和保存,如下语句:

:set ff=dos
:%s/\r\+$//e

c)若你的vim版本小于等于7.1,又想把文章按照unix格式显示和保存,如下语句:

:set ff=unix
:%s/\r\+$//e

4)UltraEdit 保存的时候有一个选项.可以选择。打开的时候,如果是Linux格式也会提示转换dos格式,点否就好。

Comments