基本方法:7oWoQC(Y1{P1i0
IXPUB技术博客ic @#x` y
:set ff?可以查看当前编码,其实改一下:set ff=unix就好了。
h)z}\c[gL,G;S0
8R&x9QM0Hi}[Ke0
Linux下面一个脚本怎么都运行不了, 我检查了数遍,不可能有错!
$v6d"gd(u1oA0
提示:bad interpreter:No such file or directory
IXPUB技术博客(k]9vV&}y.i(Y
最后,总算发现原来是文件格式的问题。这个文件是我在Windows下用写字板编写的。
IXPUB技术博客1JU!v&E:?~c1v+Hb2g
换行的方式与Unix不一样,但是在VI下面如果不Set一下又完全看不出来。
IXPUB技术博客pF QF
HG6y5kj
K#\;K"bJ"os!e0
解决方法:IXPUB技术博客 w["@&}k!S'j
&m
o K;UUf
Hr0
1、程序是在一个网站上看到的,我保存下来,大致修改了一下。
#z"E,|\6Qe0
2、上传到linux主机运行
IXPUB技术博客mbv uoK e*|
chmod +x test
IXPUB技术博客z O$\2P&{
./test
VW;r{s0
错误提示如下:
IXPUB技术博客.I^"i }"g%hzv
bash: ./test : bad interpreter:No such file or directory
IXPUB技术博客?9Z5aK6c"p8U
3、错误分析:
IXPUB技术博客7Mk/Q1Zl
因为操作系统是windows,我在windows下编辑的脚本,所以有可能有不可见字符。
j,U`8T~,_3\)d0
从你的脚本及报告的错误看来, 很有可能是你的脚本文件是DOS格式的, 即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.
iv;yi4q&i0
可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的
;pL.BMy4B0
(1). vi filename
IXPUB技术博客&GnpufH
然后用命令
c]o5jA J!S,Q0
:set ff?
q"}*{7e
\WU H0
可以看到dos或unix的字样. 如果的确是dos格式的, 那么你可以用set ff=unix把它强制为unix格式的, 然后存盘退出. 再运行一遍看.
U6Q
qx6jzS0
(2). 用joe filename
IXPUB技术博客^MrRj
如果是DOS格式的, 那么行尾会有很多绿色的^M字样出现. 你也可以用上述办法把它转为UNIX格式的.
IXPUB技术博客2qCM4F;L)y/I
(3). 用od -t x1 filename
IXPUB技术博客-D
AfQ^Ge i
如果你看到有0d 0a 这样的字符, 那么它是dos格式的, 如果只有0a而没有0d, 那么它是UNIX格式的, 同样可以用上述方法把它转为UNIX格式的.
IXPUB技术博客+Qi1\#@{i*T'?
IXPUB技术博客OjJmG(k
转换不同平台的文本文件格式可以用IXPUB技术博客?[;\-@2OiVW
1. unix2dos或dos2unix这两个小程序来做. 很简单. 在djgpp中这两个程序的名字叫dtou和utod, u代表unix, d代表dos
7QFs*a5m8o S9]'F&Z*?0
2. 也可以用sed 这样的工具来做:
ykcu4rs0
sed 's/^M//' filename > tmp_filename
UJC up,pS~#p'x Y*C0
mv -f tmp_filename filename
/r9{5Vr&?3IEM R0
来做
IXPUB技术博客.n0N'X$FM'wi
IXPUB技术博客4m`%z0I2oO"A0mN`
特别说明:IXPUB技术博客 \*T\g+K7r;C
^M并不是按键shift + 6产生的^和字母M, 它是一个字符, 其ASCII是0x0D, 生成它的办法是先按CTRL+V, 然后再回车(或CTRL+M)
IXPUB技术博客0O6c],P/xcq%l(s
G.N8z/U~r#q0
另外, 当SHELL程序报告command not found时, 总是去检查一下你的PATH里面有没有程序要用到的每一个命令(没指定绝对路径的那种).小的程序, 可以一行一行核对.