2013-12-10 61 views
2

我们使用记事本++ v6.4.5编辑中文Windows XP sp3中的Bash脚本。编码格式为不含BOM的UTF-8。第一行代码如下:执行第一行linux bash脚本时发生错误

#!/bin/sh 

该源在Centos 6.4(Linux,LANG = en_US.UTF-8)上执行。但是,我们收到以下错误消息:

for242.sh: line 1: 锘?!/bin/sh: No such file or directory 

您能帮助我们吗?非常感谢。 Centos linux的配置如下:

[[email protected] ]# locale 
LANG=en_US.UTF-8 
LC_CTYPE="en_US.UTF-8" 
LC_NUMERIC="en_US.UTF-8" 
LC_TIME="en_US.UTF-8" 
LC_COLLATE="en_US.UTF-8" 
LC_MONETARY="en_US.UTF-8" 
LC_MESSAGES="en_US.UTF-8" 
LC_PAPER="en_US.UTF-8" 
LC_NAME="en_US.UTF-8" 
LC_ADDRESS="en_US.UTF-8" 
LC_TELEPHONE="en_US.UTF-8" 
LC_MEASUREMENT="en_US.UTF-8" 
LC_IDENTIFICATION="en_US.UTF-8" 
LC_ALL= 

回答

1

无论如何,它看起来像文件的开始处有一个BOM。这是Windows上的标准。如果您有dos2unix版本6.0.0或更高版本,您可以使用dos2unix删除UTF-8 BOM。如果你没有这个版本的dos2unix你可以自己构建它。从http://sourceforge.net/projects/dos2unix/

问候,

+0

我们使用“UTF-8 WITHOUT BOM”测试了一个新的bash文件,它可以工作。看来记事本++的“转换为UTF-8无BOM”菜单不起作用。 – Eman

0

您可能在该bangline的末尾有一个CR。您需要将文本文件转换为Unix行尾。

-1

当你ftp你的cmds到你的linux机器时,看你的ftp客户端是否有“转换”功能。

否则使用相对标准的实用程序dos2unix filename来清理文件并删除拖尾回车。

最后,你确定确实有东西安装为/bin/sh?您已将您的问题标记为bash,为什么不使用#!/bin/bash如果将脚本移动到作为Bourne shell的环境(真实/bin/sh),为避免混淆?

IHTH

+0

谢谢。我们使用了** dos2unix **来转换bash文件,我们也测试了**#!/ bin/bash **。错误再次发生。 – Eman