星期二, 十月 09, 2007

bad interpreter错误

在用shell写一段小程序时,运行时总报 bad interpreter 错误,字面翻译是错误的解释器,难道是指定的shell不存在,不对,#!/bin/bash 可绝对是有的.

百度一下,答案出来了.

DOS格式带来的奇怪错误“bad interpreter”

原来呀,我是在windows中写的shell,然后上传到测试机中,windows中的行结束符是\r\n,回车符+换行符,而在unix中,行结束符是\n,即换行符.因为这个而导致的错误.

好了,那么在unix下如何判断一个文件是dos格式还是unix格式,通过查找和测试,有以下三种方法:

1. 在vim命令模式下 :set ff 即会在屏幕下方出现fileformat=unix/dos
2. 如果你的机器装了joe,可以通过joe file查看文件内容,如果文件内容中有^M字符时,即表示为dos格式.[此方法在vim中无效]
3. 还有一种是直接查看文件的十六进制,\r\n的十六进制表示是0x0D,0x0A,如果同时有0D 0A即为dos格式,类似的命令有od -t x1 file

如何将dos格式转化为unix格式呢?

推荐使用dos2unix命令,看命令的字面意思就知道命令的用处了. dos2unix file 即可
另外一种使用tr命令:
cat file | tr -d '\015' > file.temp # \015表示\r的ascII码的八进制数, \x13不行, tr不支持\xnn
mv file.temp file

0 意見: