一、问题
在Windows写好了一个Shell传到服务器,执行总是说bad interpreter,但文件权限啊什么的都没有问题。那么问题来了。。。
二、解决
是文件格式的问题。这个文件是在Windows下编写的。换行的方式与Unix不一样。
因为操作系统是windows,在windows下编辑的脚本,所以有可能有不可见字符。
所以,使用
dos2unix filename
就可以解决问题,要转回来可以用
unix2dos filename
三、分析
(以下内容来源于网络)
从你的脚本及报告的错误看来, 很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A
可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的
1.使用vi进行修改
1 2 3 |
vi filename 然后用命令 :set ff |
可以看到dos或unix的字样. 如果的确是dos格式的, 那么你可以用set ff=unix把它强制为unix格式的, 然后存盘退出重新运行。
2.用od -t x1 filename
如果你看到有0d 0a 这样的字符, 那么它是dos格式的, 如果只有0a而没有0d, 那么它是UNIX格式的, 同样可以用上述方法把它转为UNIX格式的.
四、方法
1. dos2unix
unix2dos或dos2unix这两个小程序来做. 很简单. 在djgpp中这两个程序的名字叫dtou和utod, u代表unix, d代表dos
2. sed
1 2 |
sed 's/^M//' filename > tmp_filename mv -f tmp_filename filename |
特别说明:^M并不是按键shift + 6产生的^和字母M。
它是一个字符, 其ASCII是0x0D, 生成它的办法是先按CTRL+V, 然后再回车(或CTRL+M)。