关于linux:./ configure:/ bin / sh ^ M:糟糕的解释器

./configure : /bin/sh^M : bad interpreter

本问题已经有最佳答案,请猛点这里访问。

我一直在尝试在我的FED 12系统上安装lpng142。在我看来是个问题。我得到这个错误

1
2
3
[root@localhost lpng142]# ./configure
bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory
[root@localhost lpng142]#

我该怎么解决这个问题?/etc/fstab文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#
# /etc/fstab
# Created by anaconda on Wed May 26 18:12:05 2010
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root /                       ext4    defaults        1 1
UUID=ce67cf79-22c3-45d4-8374-bd0075617cc8 /boot                   ext4    
defaults        1 2
/dev/mapper/VolGroup-lv_swap swap                    swap    defaults        0 0
tmpfs                   /dev/shm                tmpfs   defaults        0 0
devpts                  /dev/pts                devpts  gid=5,mode=620  0 0
sysfs                   /sys                    sysfs   defaults        0 0
proc                    /proc                   proc    defaults        0 0


要修复此问题,请使用vi或vim打开脚本,然后在vi命令模式下输入(键esc),然后键入:

1
:set fileformat=unix

最后保存它

:x!:wq!


看起来您有一个DOS行结束文件。线索是^M

您需要使用unix行尾重新保存文件。

您可能有一个dos2unix命令行实用程序,它也可以为您做到这一点。


或者,如果您想使用脚本执行此操作:

1
2
sed -i 's/
//'
filename


配置文件包含CRLF行尾(Windows样式),而不是简单的LF行尾(Unix样式)。你用FTP模式从Windows传送它了吗?

你可以使用

1
dos2unix configure

要修复此问题,或在vi中打开它,并使用:%s/^M//g;将其全部替换(使用ctrl+vbkbd、ctrl+m获得^m)


可以使用以下命令修复

1
2
cat file_name.sh | tr -d '
'
> file_name.sh.new


如果找不到,运行命令,

CentOS:

1
2
3
4
# yum install dos2unix*

# dos2unix filename.sh
dos2unix: converting file filename.sh to Unix format ...

Ubuntu/Debian:

1
# apt-get install dos2unix


当您已经从Windows中编辑了一个文件,现在正试图从一些基于Unix的机器中执行该文件时,通常会发生这种情况。

Linux论坛上的解决方案对我很有效(很多次):

1
2
perl -i -pe's/
$//;'
<file name here>

希望这有帮助。

PS:您需要在UNIX/Linux机器上安装Perl。


如果您使用的是OS X,则可以通过打开文件并选择

视图->文本->行尾->Unix

菜单项,然后保存。这是针对Xcode3.x的。可能与Xcode4中的类似。


使用Linux中的dos2unix命令转换保存的文件。例子:

1
dos2unix file_name

多亏了pwc101对本文的评论,这个命令可以在kali linux中工作。

sed -i s/{ctrl+v}{ctrl+m}// {filename}

确保更换括号中的位,{}。即{ctrl+m}表示同时按下ctrl键和m键。


以下是理查德的评论。下面是将文件转换为Unix行尾的简单方法。如果你和我一样,你在Windows记事本中创建了它,然后尝试在Linux中运行它——坏主意。

  • 下载并安装一份记事本+(免费)。
  • 在记事本+中打开脚本文件。
  • 文件菜单->另存为->
  • 另存为类型:Unix script file (*.sh;*.bsh)
  • 将新的.sh文件复制到Linux系统
  • 最大IT可执行文件:chmod 755 the_script_filename
  • 用:./the_script_filename运行
  • 如果有其他问题,请尝试此链接。


    你也可以在凯特身上这样做。

  • 打开文件
  • 打开"工具"菜单
  • 展开"行尾"子菜单
  • 选择UNIX
  • 保存文件。

  • 只需在脚本名之前添加sh,就可以使它在我的情况下正常工作。


    当您在Windows环境中编写脚本并希望在Unix环境中运行它时,需要注意编码:

    dos2unix$文件路径


    如果您使用的是textmate或类似程序,请执行save as,然后在编码中选择LF而不是CRLF