./configure : /bin/sh^M : 错误的解释器 [重复]

Posted

技术标签:

【中文标题】./configure : /bin/sh^M : 错误的解释器 [重复]【英文标题】:./configure : /bin/sh^M : bad interpreter [duplicate] 【发布时间】:2011-02-24 14:42:09 【问题描述】:

我一直在尝试在我的 fed 12 系统上安装 lpng142。对我来说似乎是个问题。我收到此错误

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

我该如何解决这个问题? /etc/fstab 文件:

#
# /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

【问题讨论】:

谢谢,dos2unix 拯救了我的一天。对于 osx 用户,它变得越来越容易。酿造安装 dos2unix dos2unix VIM :set fileformat=unix 问题的年龄通常不是决定重复的因素。一个在 Google 中很容易找到的一般性、重点突​​出的问题通常比一个晦涩的、专业的问题(答案恰好是相当笼统的)更适合重复目标。 @tripleee 说服力不够,因为任何用户都可以更轻松地将错误日志复制粘贴到网络搜索中 如果您真的认为副本应该反过来,请在Meta Stack Overflow 提出。郑重声明,“糟糕的翻译”症状是许多可能的症状之一,这个问题中关于configurefstab 的详细信息令人分心。如果合并问题更容易,我很乐意将这里的几个答案合并到主副本。 【参考方案1】:

要修复,用 vi 或 vim 打开脚本并进入 vi 命令模式(键 Esc),然后输入:

:set fileformat=unix

终于保存了

:x!:wq!

【讨论】:

我对多个文件有同样的问题,如何将其应用于目录树?我需要去每个目录并在vi中一一打开文件并执行“:set fileformat = unix”吗?请帮忙。 :set ff=unix 也可以 :) 为什么用“!”保存?仅当您想放弃更改时才使用它,事实并非如此。如果保存失败,那么可能你做错了什么。 添加到您的 .vimrc 文件中也是一个好主意,这样您以后就不必担心这个了。 不适用于我的vi (rapbian jessie)。【参考方案2】:

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

您需要使用 Unix 换行符重新保存文件。

您可能有一个dos2unix 命令行实用程序也可以为您执行此操作。

【讨论】:

是的,^M 有点奇怪。我确实在网络的某个地方看到了这个 dos2unix 配置建议,但不想遇到其他问题。好的,祈祷,我会试一试 :) 感谢 Konerak 和 Richard 的快速回复 如果您尝试构建的项目有许多需要转换的脚本(Qt 就是这种情况),递归地应用 dos2unix 可能是个好主意。从***目录运行“find . -type f | xargs dos2unix”将为您完成。 Freakin Qt 配置文件(从这里的源代码构建)有这个垃圾。 sigh 真正有用的工具,可以节省大量的体力劳动。再说一次,为什么在下载以 ZIP 文件的名称附带“无处不在”的库的源代码时应该这样做是我无法理解的。 dos2unix 修复它... ps:yum install dos2unix 如果需要 太棒了!对于 Sublime Text 3 用户,这可以通过选择 View -> Line Endings -> Unix 来解决。【参考方案3】:

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

sed -i 's/\r//' filename

【讨论】:

+1,在 debian linux 上为我工作 这很简单,但只适用于 GNU sed。对于 BSD/macOS sed,您需要使用 sed -i '' $'s/\r//' filename(来自 bash),或者更强大:sed -i '' $'s/\r$//' filename【参考方案4】:

您的配置文件包含 CRLF 行尾(windows 风格),而不是简单的 LF 行尾(unix 风格)。您是从 Windows 使用 FTP 模式 ASCII 传输的吗?

你可以使用

dos2unix configure

解决这个问题,或者在 vi 中打开它并使用 :%s/^M//g; 替换它们(使用 CTRL+V, CTRL+ M 获取 ^M)

【讨论】:

不,我确实使用 linux 下载了 .gz 文件。不知道 CRLF 是如何到达那里的。 vim 搜索和替换更容易输入:%s/\r$//g 在某些系统上(例如最近的 Debian / Ubuntu)是名为 fromdos 的二进制文件,而不是 dos2unix。【参考方案5】:

您可以使用以下命令修复

cat file_name.sh | tr -d '\r' > file_name.sh.new

【讨论】:

这在 MacOS X 10.11 上也可以正常工作【参考方案6】:

如果找不到运行命令,

CentOS:

# yum install dos2unix*

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

Ubuntu / Debian:

# apt-get install dos2unix

【讨论】:

【参考方案7】:

这通常发生在您从 Windows 编辑文件并现在尝试从某些基于 unix 的机器上执行该文件时。

Linux Forum 上提出的解决方案对我有用(很多次):

perl -i -pe's/\r$//;' <file name here>

希望这会有所帮助。

PS:你需要在你的 unix/linux 机器上安装 perl。

【讨论】:

【参考方案8】:

感谢 pwc101 对this post 的评论,此命令在 Kali Linux 中有效。

sed -i s/ctrl+vctrl+m// filename

确保替换括号中的位,。 IE。 ctrl+m 表示同时按下 Ctrl 键和 M 键。

【讨论】:

【参考方案9】:

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

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

菜单项,然后保存。这适用于 XCode 3.x。 XCode 4 中可能有类似的东西。

【讨论】:

或使用 TextWrangler(状态栏中的下拉菜单)或 Sublime(查看 > 行尾 > Unix)之类的编辑器来做同样的事情。【参考方案10】:

根据理查德的评论。这是将文件转换为 UNIX 行结尾的简单方法。如果您像我一样在 Windows 记事本中创建它,然后尝试在 Linux 中运行它——这是个坏主意。

    下载并安装一份Notepad++(免费)。 在 Notepad++ 中打开您的脚本文件。 文件菜单 -> 另存为 -> 另存为: Unix script file (*.sh;*.bsh) 将新的 .sh 文件复制到您的 Linux 系统 最大化它的可执行性:chmod 755 the_script_filename 运行它:./the_script_filename

其他问题try this link.

【讨论】:

Notepad++ 中还有一个设置可以设置默认的行尾,转到:“Preferences->New Document->Format”并选择 Unix。但有一点需要注意:这只是新文件的默认设置,如果在现有文件中检测到其他内容,它不会更改格式。 您可以使用 NOtepad++ 中的替换功能来切换行尾。打开“扩展”搜索模式,在查找中输入“\r\n”,在替换中输入“\n”。点击全部替换! 要在 Notepad++ 中修复,只需右键单击右下角的 DOS\Windows,然后选择 UNIX/OSX 格式 【参考方案11】:

如果您使用 TextMate 或类似程序,请另存为,然后在编码中选择 LF 而不是 CRLF

【讨论】:

【参考方案12】:

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

dos2unix $filePath

【讨论】:

yum install dos2unix【参考方案13】:

只需在脚本名称前添加 sh 即可使其适用于我的情况。

【讨论】:

非常感谢您发布此信息。所有这些 dos2unix / line-ending-fix 解决方案都不适合我。我终于通过sudo sh ./MyScript.sh 让它运行起来。在 RedHat 6 / RHEL 6 上完成【参考方案14】:

使用linux中的dos2unix命令来转换保存的文件。 示例:

dos2unix file_name

【讨论】:

【参考方案15】:

您也可以在 Kate 中执行此操作。

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

【讨论】:

以上是关于./configure : /bin/sh^M : 错误的解释器 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

GEN configure /bin/sh: 1: autoconf: not found

sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory

sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory

linux sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory

bin/sh^M: bad interpreter: No such file or directory解决

sh脚本异常:/bin/sh^M:bad interpreter: No such file or directory