@for&ever 2009-11-2
一、现象描述:
Windows下面编写脚本 forandever.sh,上传到Unix/Linux下面,执行如下命令运行:
#chmod +x forandever.sh
#./forandever.sh
错误如下:
bash: ./back : bad interpreter:No such file or directory
二、问题原因:
文件格式问题。因为Windows 和 Unix/Linux 的文件换行方式不一样。
例如,文件是在Windows下编写的,换行方式采用的是Windows下面的方式,但是在Unix/Linux的 VI下面如果不Set一下则看不出来差别。
Windows下脚本文件一般默认是DOS格式的, 行尾以/r/n来标识, 其ASCII码分别是0x0D, 0x0A.
三、解决办法:
转换不同平台的文本文件格式到对应的平台。
1. 使用unix2dos或dos2unix:
在C系统DJGPP中名字为dtou和utod, u代表unix, d代表dos
2. 用sed :
sed 's/^M//' filename > tmp_filename
mv -f tmp_filename filename
其中:^M是一个字符, 其ASCII是0x0D, 生成办法:先按CTRL+V, 然后再回车或CTRL+M
3、在Windows下面使用 UE或者 EmEditor 等文本编辑器打开文件,
然后另存为,选择文件保存的格式中,换行方式里面选择 仅Unix(LF)保存后上传即可。
四、附:
如何检查文件格式?(DOS格式、UNIX格式、MAC格式)
1、 VI命令
#vi filename
#:set ff?
这时,可看到dos或unix字样。
如果是dos格式, 用set ff=unix把它强制转换为unix格式, 存盘退出应该即可运行。
2、joe命令
#joe filename
如果是DOS格式, 行尾会有很多绿色的^M字样。
3、od命令
#od -t x1 filename
如果有0d 0a 等字符, 是dos格式, 如果只有0a而没有0d, 是UNIX格式。
@forandever 2009-11-2